如何在从文件中读取整数时使用 file.eof()?
How to use file.eof() while reading in integers from a file?
我正在编写一个从文件中读取数据的程序。该文件包含整数行,例如
5 6 2 8 6 7
2 5 3
4 0 9 1 3
每行的第一个整数对应于该行中的数字数。我的目标是读取每一行,将数字存储在向量中,并对它们进行一些操作。这是我所做的:
int main(){
vector<int> vec;
int amount;
int nums;
ifstream file ("file.txt");
while(!(file.eof())){
file >> amount;
cout << amount << endl;
for (int i = 0; i < amount; i++){
file >> nums;
vec.push_back(nums);
}
printArray(vec);
bubbleSort(vec);
vec.clear();
}
return 0;
}
不幸的是,最后一行总是被读两次。我在网上查看并看到 eof(( 函数不应该用于维护循环。在这种情况下,我还可以使用什么?
谢谢。
operator>>
设置流的eofbit
标志,如果它尝试读取过去的EOF。 您可以使用该条件来中断循环。 但是,在评估eof()
之前,您必须实际执行读取操作。 请参阅为什么循环条件中的iostream::eof(即'while (!stream.eof((((被认为是错误的?了解更多详情。
由于您正在处理基于行的文本,因此可以使用std::getline()
先读取每一行,然后可以使用std::istringstream
来解析每一行,例如:
int main()
{
vector<int> vec;
ifstream file ("file.txt");
string line;
while (getline(file, line)) {
istringstream iss(line);
int amount, nums;
iss >> amount;
cout << amount << endl;
for (int i = 0; (i < amount) && (iss >> nums); ++i){
vec.push_back(nums);
}
printArray(vec);
bubbleSort(vec);
vec.clear();
}
return 0;
}
或者,您可以简单地利用operator>>
跳过空格的事实,包括换行符,例如:
int main()
{
vector<int> vec;
int amount, nums;
ifstream file ("file.txt");
while (file >> amount) {
cout << amount << endl;
for (int i = 0; (i < amount) && (file >> nums); ++i){
vec.push_back(nums);
}
printArray(vec);
bubbleSort(vec);
vec.clear();
}
return 0;
}
但是,与std:getline()
方法相比,此方法对输入数据中的错误的弹性会稍差一些。 如果给定行中的实际数字量与行首的指定数量不匹配,则此方法将使文件读取不同步。 更糟糕的是,如果给定的行包含任何非整数值,则此方法根本无法读取任何后续数据。
在std:getline()
方法中,如果给定的行格式不正确,代码将简单地移动到下一行并继续前进,就像没有发生任何不好的事情一样。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 如何确定我已使用非编码文件到达 EOF?
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- Visual Studio C++ Project File CustomBuild Task: Filter Outp
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 而(!inputfile.eof())只读取第一行?
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 如何在 EOF 之前从文件中读取并将其放入字符串中?
- 如何在从文件中读取整数时使用 file.eof()?
- "No such file or directory" C++标头问题
- "eof"可以设置为流吗?
- 使用 sftp_open() 使用 C++ 中的 SFTP libssh 将文件从本地复制到远程时,File 返回 N
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- 吃完 EOF 后重复使用 std::cin
- c++ getline() and file EOF