读入数字但在C ++中停止

时间:2016-09-26 05:25:32

标签: c++ arrays input ifstream

我要做的是从文本文件中读取数字(当前称为“输入”)。我正在创建两个数组,一个用于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;
        }
    }
}

2 个答案:

答案 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(...)方法。