valore non è né un array né un puntatore

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:

  • Come variabile globale nella parte superiore del file, e
  • Come parametro chiamato alla tua funzione.

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 ()!