Ho questo codice:
int ID [STUDENTS]; int Scores [STUDENTS][GRADES]; int Hi [GRADES]; int Lo [GRADES]; double Avg [GRADES]; int numStudents; /*getData function called*/ int getData(ID, Scores, numStudents) { int student_count; int quiz_count; FILE* spIn; spIn = fopen("myfile.dat", "r"); student_count=0; while (fscanf (spIn, "%d", ID[student_count]) != EOF) { for (quiz_count = 0; quiz_count < GRADES; quiz_count++) { fscanf (spIn, "%d", Scores[student_count][quiz_count]); } } }
Continuo a ricevere l’errore nel titolo per le righe: while(fscanf (spIn, "%d", ID[student_count]) !=EOF)
e fscanf (spIn, "%d", Scores[student_count][quiz_count]);
Aiutatemi, non so cosa fare!
Il problema è con l’ambito delle variabili ID
e Scores
. Entrambe le variabili sono definite in due punti:
Il parametro named è più vicino al campo di utilizzo, quindi vince.
Sembra che l’uso in secondo luogo (cioè come parametro di funzione) non sia intenzionale, perché le dichiarazioni mancano di tipi * . Rimozione li renderà il tuo codice compilare.
* nel qual caso C li considera int
s e emette un avvertimento che dovrebbe aver spiegato l’errore: poiché il compilatore pensa che l’ ID
e il Score
dell’ambito interno siano int
s, non è ansible utilizzare l’operatore indice []
con essi.
Entrambe le istanze di fscanf () non sono corrette. fscanf () ha bisogno di puntatori, non di inte, per modificare la memoria in quella posizione.
La tua prima chiamata è questa:
while (fscanf (spIn, "%d", ID[student_count]) != EOF)
Quando student_count
la variabile ID
stai passando il valore dell’indice student_count
alla funzione. Quale fscanf () tenta di interpretare come una posizione di memoria (non buona)!
Questo:
while (fscanf (spIn, "%d", &ID[student_count]) != EOF)
passa il riferimento dell’array all’indirizzo student_count
a fscanf ().
Lo stesso vale per l’altra chiamata a fscanf ()!