从文件中读取数据到数组C ++时,循环会跳过行

时间:2017-10-25 23:12:14

标签: c++ arrays file loops fstream

我正在为我的CS 1类开发一个项目,我们必须创建一个将文件中的数据读入数组的函数。但是,当它运行时,它只读取所有其他数据行。

该文件包含22 3 14 8 12和我得到的输出:3 8 12

非常感谢任何帮助。对不起,如果已经回答,我找不到。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int readin();

int main() {
  readin();
  return 0;
}

int readin(){
  ifstream inFile;
  int n = 0;
  int arr[200];

  inFile.open("data.txt");

  while(inFile >> arr[n]){
    inFile >> arr[n];
    n++;
  }

  inFile.close();

  for(int i = 0; i < n; i++){
    cout << arr[i] << " " << endl;
  }
}

2 个答案:

答案 0 :(得分:1)

原因是您正在条件查询中读取文件流:

while(inFile >> arr[n]) // reads the first element in the file

然后再次读取它并在循环中重写这个值:

{
    inFile >> arr[n];  // reads the next element in the file, puts it in the same place
    n++;
}

只是做:

while(inFile >> arr[n]) n++;

答案 1 :(得分:1)

你可以这样做:

while(inFile >> arr[n]){
    n++;
}

但是如果文件中的值的数量大于数组大小呢? 然后你面对undefined behavior

  • 我建议使用vectors

    std::vector<int> vecInt;
    int value;
    
    while(inFile >> value)
       vecInt.push_back(value);
    
    for(int i(0); i < vecInt.size(); i++)
        std::cout << vecInt[i] << std::endl;