Witam!
Mam prośbę dt. programu, który jest swojego rodzaju dzienniczkiem studenckim. Po podaniu imienia nazwiska i oceny program zwraca informacje odnośnie naruszenia ochrony pamięci. Mógłby ktoś zajrzeć w kod i napisać w czym może leżeć problem?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct {
unsigned char nazwisko[30], imie[30], oceny[60][4];
int liczba_ocen;
}Student;
void normalize(char tekst[30]){
int i;
toupper(tekst[0]);
for(i=1; i<=strlen(tekst); i++)
tolower(tekst[i]);
}
int porownaj_studentow(Student a, Student b){
if(strcmp(a.nazwisko, b.nazwisko))
return strcmp(a.imie, b.imie);
else
return strcmp(a.nazwisko, b.nazwisko);
}
int main(){
Student grupa[30];
char im[30],naz[30],oc[4];
int liczba_stud = 0, i;
while(!feof(stdin)){
scanf("%s %s %s", im, naz, oc);
normalize(im); normalize (naz);
printf("%s %s \n", im, naz);
for(i=0; i<=liczba_stud; i++){
if(!(strcmp(grupa[i].nazwisko,naz) && (strcmp(grupa[i].imie, im)))){
strcpy(grupa[i].oceny[grupa[i].liczba_ocen],oc);
grupa[i].liczba_ocen++;
}
else {
strcpy(grupa[i].nazwisko,naz);
strcpy(grupa[i].imie,im);
strcpy(grupa[i].oceny[grupa[i].liczba_ocen],oc);
grupa[i].liczba_ocen++;
liczba_stud++;
}
}
}
/*qsort(grupa, liczba_stud, sizeof(Student),porownaj_studentow);*/
for(i=0;i<liczba_stud;i++) {
printf("\n %s %s:", grupa[i].nazwisko,grupa[i].imie);
int suma, k;
for(k=0;k<grupa[i].liczba_ocen;k++){
/* switch (grupa[i].ocena[k]) {
case "-5","5-": suma += 4.75; break;
case "+5","5+": suma += 5; break;
case "-4","4-": suma += 3.75; break;
case "+4","5+": suma += 4.25; break;
case "-3","3-": suma += 2.75; break;
case "+3","3+": suma += 3.25; break;
case "-2","2-": suma += 2; break;
case "+2","2+": suma += 2.25; break;
case "0": suma += 0; break;
} */
}
}
}
return 0;