**编辑:我通过改变'inStream>>来实现它。 next'to'inStream>> skipws>>下一个'。在我之前的一个函数中(提取最后一个名字)我已经切换了noskipws。显然,切换在函数之间持续?
我有一个程序是一个赋值的一部分,它应该读取一个文本文件,其格式为:“lastname firstname 1 2 3 4 5 6 7 8 9 10”(其中每个都是10个)数字是整数分数。)
我能够读取姓氏和名字,但是当我开始阅读数字时,我只能读取第一个,然后所有其余的都被设置为0。
下面是应该读取分数的函数.inStream已经取消了lastname和firstname。我正在使用的文本文件有一行:
Tosis Halley 85 23 10 95 43 12 59 43 20 77
当运行程序并打印出student.score值从0到9时,第一个正确显示为'85'但所有重置显示为'0'。想法?
void GetScores (ifstream& inStream, record& student)
{
int score[10] = {-1, -1, -1, -1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1};
int next;
int counter = 0;
string test;
for (int i = 0; i < 10; i++)
{
inStream >> next;
student.score[i] = next;
}
}
答案 0 :(得分:2)
假设输入确实是所有数字,那么该函数应该实际工作。但是,您应始终验证输入确实已正确读取:
for (int i = 0; i != 10 && inStream >> next; ++i) {
student.score[i] = next;
}
if (!inStream) {
std::cout << "an input error occured\n";
}