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

标签 c++ arrays fstream

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

文本文件中的信息
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

最佳答案

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

一个快速修复方法是在运行 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() 的内部 bool 运算符.

关于c++ - 为什么在将数据从文本文件移动到数组时无法获得正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58829607/

相关文章:

C++ 将 3D 速度 vector 转换为速度值

c++ - 模仿unix shell管道

java - 使用随机类填充数组,然后打印它的值

C++ fstream 打开

c++ - 从文件中读取值并使用类

c++ - 在 C++ 中,用自身初始化全局变量是否具有未定义的行为?

Javascript从存储在索引上的数组内的对象获取键

java - 在 Java 中序列化 Longs 数组的最紧凑方法

c++ - C++文本文件末尾的两个点

python - 无法构建使用 Python 的项目