为什么在将数据从文本文件移动到数组时无法获得正确的输出
Why I can't get the correct output when moving data from text file to array
当我尝试将信息从文本文件移动到数组时出现奇怪的输出,任何人都可以帮助我解决问题?非常感谢。
文本文件中的信息
这是我的代码
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
int main()
{
ifstream indata;
string name[10] , id[10] , gender[10];
int i = 0 , age[10];
double weight[10] , height[10];
indata.open("Staff.txt");
while(!indata.eof())
{
if(indata.eof()==true)
break;
else
{
getline(indata,name[i]);
indata >> id[i] >> gender[i] >> age[i] >> weight[i] >> height[i];
cout << name[i] <<" "<< id[i] <<" "<< gender[i] <<" "<< age[i] <<" "<< weight[i] <<" "<<
height[i] <<endl;
i++;
}
}
system("pause");
return 0;
}
这是输出
迭代的最后一次格式化提取 (indata >> height[i]
) 将换行符留在缓冲区中,因此当下一次迭代 运行s 时 std::getline
将看到该字符,提取它并停止阅读更多字符。这会打乱导致您看到的输出的进一步输入操作。
一个快速修复方法是删除 运行ning std::getline
之前的所有前导空格。您还错误地使用了 eof()
方法。好的做法是先 运行 输入操作,然后 然后 检查它是否成功 fail()
.
它应该是这样的:
while (std::getline(indata >> std::ws, name[i]) &&
indata >> id[i] >> gender[i] >> age[i] >> weight[i] >> height[i]) {
// ...
}
indata >> std::ws
删除前导空格并将输入操作置于 while 循环的条件中将调用调用 fail()
.
的内部布尔运算符
当我尝试将信息从文本文件移动到数组时出现奇怪的输出,任何人都可以帮助我解决问题?非常感谢。
文本文件中的信息
这是我的代码
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
int main()
{
ifstream indata;
string name[10] , id[10] , gender[10];
int i = 0 , age[10];
double weight[10] , height[10];
indata.open("Staff.txt");
while(!indata.eof())
{
if(indata.eof()==true)
break;
else
{
getline(indata,name[i]);
indata >> id[i] >> gender[i] >> age[i] >> weight[i] >> height[i];
cout << name[i] <<" "<< id[i] <<" "<< gender[i] <<" "<< age[i] <<" "<< weight[i] <<" "<<
height[i] <<endl;
i++;
}
}
system("pause");
return 0;
}
这是输出
迭代的最后一次格式化提取 (indata >> height[i]
) 将换行符留在缓冲区中,因此当下一次迭代 运行s 时 std::getline
将看到该字符,提取它并停止阅读更多字符。这会打乱导致您看到的输出的进一步输入操作。
一个快速修复方法是删除 运行ning std::getline
之前的所有前导空格。您还错误地使用了 eof()
方法。好的做法是先 运行 输入操作,然后 然后 检查它是否成功 fail()
.
它应该是这样的:
while (std::getline(indata >> std::ws, name[i]) &&
indata >> id[i] >> gender[i] >> age[i] >> weight[i] >> height[i]) {
// ...
}
indata >> std::ws
删除前导空格并将输入操作置于 while 循环的条件中将调用调用 fail()
.