【问题标题】:File isn't being read? (C++)文件没有被读取? (C++)
【发布时间】:2022-01-23 09:05:47
【问题描述】:

我正在尝试将文本文件中的数字读取到程序中,但由于某种原因,程序没有读取文件。这是我的代码:

#include <iostream>
#include <stream>
using namespace std; 

int main()
{

ifstream infile; 

infile.open ("adventDay1.txt"); 

if (!infile) { //Check if file is opening 

    cerr << "Error!"<< endl;

    return 0; 
}

int dataSize = 0;
infile >> dataSize; 
int* arr; 
arr = new int[dataSize]; //dynamically allocated array

int measureCount = 0; //Keep track of input from file 


for (int i = 0; i < dataSize; i++) {

   // infile >> dataSize; 

    arr[i] = dataSize;

    measureCount += 1; 
}

 cout << measureCount << endl; 

delete[] arr; //Delete dynamically allocated memory 
return 0; 
}

每次我运行它时,它只会显示“错误!”我添加的消息。文本文件中有 2,000 个数字,因此根据我在这里的内容,这应该是预期的输出。我无法确定错误。

【问题讨论】:

  • 程序工作目录可以与源文件所在的目录不同。第一步,从完整的文件路径开始。
  • 作为故障排除帮助,您可以使用std::filesystem::current_path 来查找您的程序正在“寻找”文件的位置。需要 C++17(你应该使用它)。
  • @S.M.好的,完整路径解决了问题。无论出于何种原因,它现在只显示文件中的第一个数字,但我想我可以从这里调试。谢谢!
  • 如果由于某种原因你没有编译到 c++17,POSIX getcwd 函数可能很有用,因为它可以打开一个具有独特名称的文件,写入它,关闭它并然后在计算机中搜索文件。
  • 我建议创建一个文件,一个可识别的文件名,写“Hello\n”给它。运行您的程序并在目录中搜索此文件。此文件的位置是所有文件的默认位置。将您的数据文本文件移动到此位置。 或者在文件名中指定绝对路径。

标签: c++ text-files fstream


【解决方案1】:

包括 fstream 并确保您以读取模式打开文件。或许也可以定义为ifstream infile("adventDay1.txt")

【讨论】:

  • 包括fstream 是最佳实践(包括您使用的),但如果他们能够运行它并获得“错误!”,则必须按原样编译。信息。使用接受文件名的构造函数也可以节省代码行数,这是另一个最佳实践,但不会导致这个问题,因为 open 方法是在流创建后直接调用的。
猜你喜欢
  • 1970-01-01
  • 2017-04-19
  • 2018-06-10
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多