Zliczanie cyfr w indeksie prosty program.

0

Witam mam do zrobienia program w C polegający na wczytaniu od użytkownika nazwisk i indeksów N studentów (N podane także przez użytkownika). Program ma rezerowować dla tych danych pamięć przy użyciu malloc. Następnie wypisywane jest nazwisko studenta, którego suma cyfr w indeksie jest największa. Jeżeli jest więcej takich studentów, to wypisuje pierwszego z nich. Ja do zagadnienia podeszłam w następujący sposób:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# define INDEKSY 6
typedef struct
{
    char nazwisko[100];
    int cyferki[INDEKSY];
    int suma;

}studenci;

int main()
{
    int N;
  char szczesliwiec[100];
    printf("Podaj liczbe studentow do wczytania ");
    scanf("%d", &N);

    studenci *student = (studenci*) malloc ( N* sizeof(studenci));
    int suma_maks=0;
    for ( int i = 0 ; i < N ; i++)
    {

        printf("Podaj nazwisko studenta nr %d", i+1);
        scanf("%s", student[i].nazwisko);
        student[i].suma = 0 ;
        for( int j = 0 ; j< INDEKSY; j++)
        {
            printf("Podaj %d cyfre indeksu tego studenta ", j+1 );
            scanf("%d", &(student[i].cyferki[j]));
            student[i].suma = student[i].suma + student[i].cyferki[j];

        }

     ** if(student[i].suma > suma_maks )
        {  suma_maks = student[i].suma;
        char dst[strlen(student[i].nazwisko)+1];
        strcpy(student[i].nazwisko , dst);
       szczesliwiec = dst;
        }**
    }
    printf("Student o najwiekszej sumie cyfr z indeksu to %s ", szczesliwiec);
    free(student);
    return 0;
}

Niestety przy odpalaniu programu, zamiast nazwiska studenta pokazują się dwa przypadkowe "krzaki". Domyślam się że błąd może być w ogwiazdkowanej części kodu, ale nie mam pomysłu jak w inny sposób podejść do tego zadania. Bardzo proszę o podpowiedzi.

1
scanf("%d", ...

wczytuje całą liczbę (nie pojedynczą cyfrę)
Tak a propos, po kiego trzymać wszystkich studentów jeżeli masz wybrać jednego?

1

używasz argumentów strcpy odwrotnie!
Twój kod się i tak nie kompiluje, trzeba go naprawiać!
Nie podałeś przykładowych danych wejściowych, dlatego _13th_Dragon podaje inną odpowiedź niż ja (ja zmyśliłem sobie dane wejściowe, tak by pasowały do kodu).

https://wandbox.org/permlink/3dsRV68ueTKUiPib

Naucz się korzystać z Debuggera (im ktoś bardziej początkujący tym bardziej go powinien używać, newbie powinni robić to nonestop).

0

Nie wiem jak przenieść zawartość student[i].nazwisko ( to nazwisko z największą sumą cyfr w indeksie) do zmiennej którą pod koniec poza pętlą chcę wypisać.
Przy przyrównaniu student[i].nazwisko do zmiennej typu char, wyskakuje bład ** assignment to expression with array type**

1

Przeczytaj help do strcpy i obejrzyj dołączony przykład.
Po co kopiować nazwisko skoro i tak trzymasz wszystkie? (wystarczy zapamiętać indeks)

1 użytkowników online, w tym zalogowanych: 0, gości: 1