阅读数字,但停止在负C++

问题描述:

我想要做的是从文本文件(当前称为“输入”)中读取数字。我创建了两个数组,一个用于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个值。你可以发表你的回答作为答案,所以我可以给你信用? –

更正代码

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(...)方法的返回值。

if (curID < 0) 
{ 
    return; 
} 

这是因为,如果你遇到了负数,你的算法不会是负数存储在studentID[i]

因此,studentID仍然包含从第一个无效位置开始的未初始化值。由于没有魔术标记,也没有计数器传回,因此无法重建输入的结尾。