c++ - ifstream 不读取第一行
问题描述
我正在使用ifstream
大约 1 年前使用的代码,但现在它无法正常工作。在这里,我有以下文件(所以,只有一行整数):
2 4 2 3
我在从该文件构建图表时阅读了它:
graph g = graph("file.txt");
其中图构造函数开始于:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
graph::graph(const char *file_name) {
ifstream infile(file_name);
string line;
getline(infile, line);
cout << line << endl; // first output
istringstream iss;
iss.str(line);
iss >> R >> C >> P >> K;
iss.clear();
cout << R << " " << C << " " << P << " " << K; // second output
}
第二个输出(用代码标记)不是给我2 4 2 3
,而是返回随机(?)值-1003857504 32689 0 0
。如果我添加第一个输出来检查line
after的内容getline
,它只是一个空字符串""
。
所有文件(main.cpp
实例化图形的位置,实现图形的“graph.cpp”和“file.txt”)都位于同一文件夹中。
正如我所提到的,这是我以前工作的旧代码,所以我可能没有看到一些明显的错误破坏了它。谢谢你的帮助。
解决方案
这两个位置:
- 程序的原始源代码所在的位置
- 程序的输入数据所在的位置
是完全无关的。
由于“file.txt”是相对路径,因此您的程序在执行期间会在当前工作目录中查找输入数据。有时这与可执行文件所在的位置相同。有时不是。(只有你能知道它是什么,因为它取决于你如何执行你的程序。)除了可能是偶然的,与原始源文件的位置没有任何联系。
当两者不匹配时,您会遇到此问题,因为您在程序中没有执行 I/O 错误检查。
如果您检查是否infile
打开,我打赌您会发现它不是。
这一点尤其明显,因为程序在一段时间后停止工作而没有对其逻辑进行任何更改;很有可能,唯一可能改变的是解决方案中各种元素的位置。
推荐阅读
- git - 创建同一个重复文件夹的不同分支
- tensorflow - 在 Cloud Machine Learning Engine 上运行 TensorFlow 代码时没有输出
- kubernetes - Kubernetes - 使用描述命令时获取特定元数据的值
- dataframe - 根据其他两列对具有相同键的一列求和并重命名其他值
- ssl - Jenkins 在调用其他端点时使用客户端证书
- node.js - 运行 nvm install 6.4.0 时出现 nvm 1.1.1 错误
- php - Laravel:Cookie::forget() 不起作用
- unity3d - 谷歌播放控制台上的网络连接问题
- css - JavaFx CSS 通配符
- python - 使用 Beautiful Soup + Python 脚本从打开中排除搜索链接