2015-04-08 70 views
1

我有這樣的代碼:值既不是數組,也不是一個指針

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]); 
    } 
    } 
} 

我不斷收到錯誤的標題行:while(fscanf (spIn, "%d", ID[student_count]) !=EOF)fscanf (spIn, "%d", Scores[student_count][quiz_count]);

請幫助我不知道該怎麼做!

+2

'int getData(ID,Scores,numStudents)' - 在聲明中看起來有些不妥。或者將這些參數用適當的類型形式化,或者徹底拋棄它們,並(呃)使用你的全局變量。 – WhozCraig

+1

在for循環內部的行中,您試圖掃描到一個整數,而不是指針。 – itdoesntwork

回答

1

問題出在變量IDScores的範圍之內。這兩個變量在兩個地方定義 -

  • 截至本文件頂部的全局變量,並
  • 作爲命名的參數給你的函數。

指定的參數與使用地點的範圍更接近,因此它獲勝。

它看起來像第二個地方(即作爲函數參數)的用途不是故意的,因爲聲明缺少類型*。刪除它們會使你的代碼編譯。

*在這種情況下,C中視爲他們int S,併發出本應解釋錯誤給你一個警告:因爲編譯器認爲,內範圍IDScoreint S,則不能使用索引操作符[]與他們。

+0

謝謝,修正了它! – ShearForce

2

fscanf()的兩個實例都不正確。 fscanf()需要指針而不是ints來修改該位置的內存。

你的第一個電話是這樣的:

while (fscanf (spIn, "%d", ID[student_count]) != EOF) 

當指數ID你傳遞的student_count指數函數的值的變量。哪個fscanf()試圖解釋爲內存位置(不好)!

此:

while (fscanf (spIn, "%d", &ID[student_count]) != EOF) 

穿過所述陣列的索引student_count提及的fscanf()。

另一個調用fscanf()也是如此!

相關問題