我要做的是从文本文件中读取数字(当前称为“输入”)。我正在创建两个数组,一个用于int数,另一个用于float数。数组中的最大项目数设置为50,但最小值为1.停止读取数字的程序的标识符是int值中的任何负数。
我不知道为什么,但是当我回读时,我的数组打印出数字,跳过最后的负数,然后打印出其余插槽的乱码值(最多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;
}
}
}
答案 0 :(得分:1)
if (curID < 0)
{
return;
}
这是因为如果您遇到负数,您的算法不会在studentID[i]
中存储该负数。
因此,studentID
仍然包含从第一个无效位置开始的未初始化值。如果没有魔法标记,也没有计数器返回,则无法重建输入的结尾。
答案 1 :(得分: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(...)
方法。