为什么将数据从文本文件移动到数组时无法获得正确的输出

问题描述 投票:0回答:1

当我尝试将信息从文本文件移动到数组时,我得到的输出很奇怪,有人可以帮助我解决问题吗?非常感谢。

Information in textfile

这是我的代码

#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;
   }

Here is the output

c++ arrays fstream
1个回答
0
投票

最后一次格式化的迭代提取(indata >> height[i])将换行符留在缓冲区中,因此,当下一次迭代运行时,std::getline将看到该字符,将其提取并停止读取其他字符。这会使进一步的输入操作变得混乱,导致您看到的输出。

一个快速的解决方法是在运行std::getline之前删除所有前导空格。您也错误地使用了eof()方法。优良作法是先运行输入操作,然后then检查是否以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()

© www.soinside.com 2019 - 2024. All rights reserved.