2016-09-26 87 views
0

我想要做的是從文本文件(當前稱爲「輸入」)中讀取數字。我創建了兩個數組,一個用於int數字,另一個用於浮點數。數組中的最大項數設置爲50,但最小值爲1.程序停止讀取數字的標識符是int值中的任何負數。閱讀數字,但停止在負C++

我不知道爲什麼,但是當我讀回數組時,會跳過最後的負數,然後打印剩餘插槽(最多50個)的亂碼值。

任何意見,將不勝感激。

void Read(ifstream &input, int studentID[], float score[]) 
{ 
    int curID; 
    float curScore; 
    for (int i = 0; i < 50; i++) 
    { 
     input >> curID >> curScore; 
     if (curID < 0) 
     { 
      return; 
     } 
     else 
     { 
      studentID[i] = curID; 
      score[i] = curScore; 
     } 
    } 
} 
+1

我假設你試圖從1到50打印數組而不檢查讀取元素最大索引的限制。因此,您必須根據總數保持讀取和打印元素的總數。 –

+0

你說得對。我只是自己意識到這一點。我在不檢查數組長度的情況下打印出50個值。你可以發表你的回答作爲答案,所以我可以給你信用? –

回答

0

更正代碼

int Read(ifstream & input, int studentID[], float score[]) 
{ 
    int curID, i = 0; 
    float curScore; 
    while (i < 50) { 
     input >> curID >> curScore; 
     if (curID < 0) 
      break; 
     else { 
      studentID[i] = curID; 
      score[i++] = curScore; 
     } 
    } 
    return i; // This value will be useful while printing the contents 
} 

爲了避免亂碼輸出,只重複,直到你成功地讀取,即Read(...)方法的返回值。

1
if (curID < 0) 
{ 
    return; 
} 

這是因爲,如果你遇到了負數,你的算法不會是負數存儲在studentID[i]

因此,studentID仍然包含從第一個無效位置開始的未初始化值。由於沒有魔術標記,也沒有計數器傳回,因此無法重建輸入的結尾。