【问题标题】:Why aren't the numbers from my input file going into my array c++?为什么我的输入文件中的数字没有进入我的数组 c++?
【发布时间】:2017-04-01 03:27:14
【问题描述】:

我通过引用将整数文本文件传递给函数。它们由新行分隔。我想将它们推送到函数中的新数组中。我可以计算行数没有问题,并且我使用该变量来创建给定大小的数组,因此不需要向量。但是当我打印应该是我的数组的内容时,它就离题了。我是否需要再次将文件中的整数转换为 int 值(因为我正在从文本文件中读取,是否将它们作为字符串读取?)帮助?

C++ 代码:

void myFunction(ifstream& infile)
{
    int NumberOfLines = 0;
    int index;
    string line;
    //Count the number of lines in the file
    if(infile.is_open())
    {
        while(getline(infile, line))
        {
            ++NumberOfLines;
        }
    }
    int arr[NumberOfLines];
    //Put the numbers into an array
    while(!infile.eof())
    {
        infile>>arr[NumberOfLines];
    }
    //Print the array
    for(int i=0; i<NumberOfLines; i++)
    {
        cout<<arr[i]<<endl;
    }
}

【问题讨论】:

  • “我使用该变量来创建给定大小的数组” 这在 C++ 中实际上是非法的。一些 C++ 编译器通过扩展允许它,但不推荐使用它。 A) 不适用于所有编译器。 B)这是溢出堆栈(或用于自动存储的任何内容)的一种非常简单的方法 3)它使sizeof 运算符绝对令人恐惧。使用vector。这种事情正是它的用途。
  • while(!infile.eof()) 是一个常见的错误。在这里阅读更多:stackoverflow.com/questions/5605125/…
  • infile&gt;&gt;arr[NumberOfLines]; 写入越界(即使编译器支持这个数组,lat 有效索引为NumberOfLines-1

标签: c++ arrays file-io


【解决方案1】:

当您第一次扫描文件时,为了计算行数,ifstream 位置指示器到达文件末尾。

为了再次读取文件,您应该将位置指示器重置为开头,使用:

infile.seekg(0, std::ios_base::beg);

更多信息:seekg, ifstream

【讨论】:

  • 注意:您可能还需要clear() eof 标志,然后再倒回文件。
  • @user4581301 你是对的,以防他不使用 c++11 或更高版本。自从 c++11 seekg 为你做这件事。
  • 枪之子。不知道,但它在 [istream.unformatted] 中。很酷。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多