阅读数字,但停止在负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;
}
}
}
答
更正代码
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
仍然包含从第一个无效位置开始的未初始化值。由于没有魔术标记,也没有计数器传回,因此无法重建输入的结尾。
我假设你试图从1到50打印数组而不检查读取元素最大索引的限制。因此,您必须根据总数保持读取和打印元素的总数。 –
你说得对。我只是自己意识到这一点。我在不检查数组长度的情况下打印出50个值。你可以发表你的回答作为答案,所以我可以给你信用? –