Witam! Mam do napisania program, który:
1. Z pliku wejściowego pobierze imię, nazwisko oraz ocenę
2. Przypisze odpowiednie wartości do danego elementu struktury
3. Wypisze na ekran output w postaci: Jan Kowalski 5, 3, 4.5
4. Jeśli nazwisko i imię w pliku wejściowym będzie powtórzone, to ma dopisać do istniejącego wpisu ocenę
5. Jeśli nazwisko pojawia się po raz pierwszy, ma utworzyć nową linijkę z oceną ("Adam Nowak 2.0")
Na początek definiuję strukturę:
typedef struct
{
char nazwisko[ 30 ];
char imie[ 30 ];
char ocena[ 30 ][ 4 ];
int liczba_ocen;
} student;
student grupa[ 30 ];
W celu porównania (i estetyki) pobrane z pliku imię i nazwisko wysyłam do funkcji, która zamienia pierwszą literę na wielką, pozostałe na małe:
int ZmienLitere( char napis[] )
{
napis[ 0 ] = toupper(( napis[ 0 ] ) );
int i = 0;
for( i = 1; i <=( strlen( napis ) ); i++ )
{
napis[ i ] = tolower( napis[ i ] );
}
}
Oraz funkcja służąca do porównania imienia i nazwiska:
int porownaj( student s1, student s2 )
{
int i;
i = strcmp( s1.nazwisko, s2.nazwisko );
if( i == 0 ) return strcmp( s1.imie, s2.imie );
else return i;
}
Problem pojawia się w tym, że nie wiem jak napisać fragment, który sprawdza, czy nazwisko pojawiło się już wcześniej. Z tego co udało mi się wymyślić, to:
1. Tworzę strukturę tymczasową student temp, do której będę wrzucał aktualnie odczytane nazwisko
2. Pętlą for/while sprawdzam po poprzednich elementach grupa
, czy taki sam wpis już istnieje
3. Jeśli nie, to przypisuję wartość temp.ocena do grupa.ocena[j]
Oto moje wypociny - czy ktoś może pomóc naprowadzić mnie na rozwiązanie? Czy należy uzupełnić najpierw pierwszy element grupa[0], a potem porównywać go z elementem grupa[1], grupa[2] itd.? Z góry dziękuję! :)
while( !feof( F ) )
{
fscanf( F, "%s, %s, %s", & tempNazwisko, & tempImie, & tempOcena );
tempImie = ZmienLitere( tempImie );
tempNazwisko = ZmienLitere( tempNazwisko );
tempOcena = konwertuj( tempOcena );
for( i = 0; i < 30; i++ )
{
strcpy( grupa[ i ].imie, tempImie );
strcpy( grupa[ i ].nazwisko, tempNazwisko );
strcpy( grupa[ i ].ocena, tempOcena );
}
}