Zliczanie cyfr w indeksie prosty program.

Odpowiedz Nowy wątek
2019-09-04 12:17
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.

edytowany 4x, ostatnio: Missya122, 2019-09-04 12:23
Popraw tytuł na coś co mówi o treści problemu. Obecny pasuje do czegokolwiek. - MarekR22 2019-09-04 12:21

Pozostało 580 znaków

2019-09-04 12:37
1
scanf("%d", ...

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: cerrato, 2019-09-04 12:42
WOW wrociles :) witaj z powrotem :) - fasadin 2019-09-04 12:59
Skończyłem spory projekt, więc z czasem jest teraz luźniej. Ale widzę tu ruch zmalał :/ - _13th_Dragon 2019-09-04 13:34

Pozostało 580 znaków

2019-09-04 12:46
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).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 4x, ostatnio: MarekR22, 2019-09-04 12:50

Pozostało 580 znaków

2019-09-04 12:52
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

Pozostało 580 znaków

2019-09-04 12:58
1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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