Во-первых, вы не проверяли возвращаемое значение fopen()
, так как если файл не существует, ваш код не должен выполнять дальнейшую операцию на fp1
.Поэтому проверьте возвращаемое значение как
fp1 = fopen("grades.txt","r");
if(fp1 == NULL) {
/* error handling */
}
Во-вторых, как упоминалось @paul Почему «while (! Feof (file))» всегда неверно? , вместо этого используйте fscanf()
внутриwhile
loop & проверьте возвращаемое значение fscanf()
как
while(fscanf(fp1,"%d %d %d %d %d %d", &a[i].number, &a[i].q[0], &a[i].q[1], &a[i].q[2], &a[i].q[3], &a[i].total) == 6 ) { /* 6 is the no of read item */
printf("%d %d %d %d %d \n", a[i].number,a[i].q[0], a[i].q[1], a[i].q[2], a[i].total);
i++;
}
Некоторые глупые ошибки, которые вы допустили, поскольку было еще одно %d
внутри printf()
оператора, которое вы могли бы решить или наблюдать при компиляциис флагом -Wall
.Это
printf("%d %d %d %d %d %d\n", a[i].number,a[i].q[0], a[i].q[1], a[i].q[2], a[i].total);
с шестью %d
, но вы предоставили только 5 аргументов, удалите лишние %d
, так как есть только 5 аргументов.