我正在阅读文件,但在阅读时,它是阅读最后一个字符一次额外
I am reading file but while reading,it is reading last character one time extra?
我试图通过以下代码读取文件
void main()
{
int i=0;
ifstream fout1 ("Aj.txt",ios::binary);
if (fout1.is_open())
{
while(fout1)
{
i++;
fout1.get(ch1);
cout<<ch1;
}
cout<<i;
fout1.close();
}
else
{
cout << "Unable to open file";
}
return 0;
}
这里,这段代码读取整个文件,但它会进入一次额外的循环,即如果文件中有4个字符,那么在循环中它会迭代5次。如何纠正或克服它
该代码读取直到设置了eof
标志,但直到读取实际失败才设置eof
标志。这意味着当fout1.get(ch1)
读取最后一个字符时,eof
是而不是设置。所以它显示,并检查fout
,它仍然是好的,所以它重新进入循环。然后fout1.get(ch1)
因为eof失败,它又显示了之前的ch1
的值。写这个循环的正确方法是:
while(fout1.get(ch1)) { //false when it can't read any more characters
i++;
cout<<ch1;
}
cout<<i;
fout1.close();
读取第4个字符后,流仍然处于良好状态,因此它尝试读取第5个字符,此时它遇到文件结束。您应该在调用get
之后检查流状态。例如:
while( fout1.get(ch1) )
{
cout << ch1;
++i;
}
如果您不熟悉iostreams,这是一个容易犯的错误。如果您只读取文件中的最后一个字符,stream.eof()
将为false。只有当尝试读取文件末尾的之后的时,才会出现这种情况。你需要一个像这样的内循环:
for (;;)
{
fout1.get(ch1);
if (!fout1) break;
cout << ch1;
i++;
}
相关文章:
- 为什么完整的字符串没有一次打印,但是当我尝试逐个字符打印时
- 如何从文本文件中一次读取一个字符
- 尝试一次将单个字符读取到大小不确定的数组中
- 一次读取一个字符的文件,直到使用 read(2) 和 write(2) 换行符
- 为什么一次打印一个字符比提前连接它们慢
- 尝试一次读取一个字符的矩阵
- 如何修复密码条目,它一次输入两个字符
- 至少包含一次字符 X 的 S 的不同子字符串的数量
- 仅当捕获组最后一次出现时,才使字符成为可选字符
- 在将数组与字符数组进行比较后需要帮助输出一次结果
- 如何一次对 3 个字符使用 switch 语句
- C++一次打印一个单词的字符串,计算字符数和字符数
- 在C++中一次一行地从文本文件中读取int(好的字符,然后转换)时出现问题
- 一次读取一个字符的字符串,直到行或文件末尾
- 删除字符C++最后一次出现时字符数组的开头
- 如何遍历整个字符串并一次播放一个字符C++
- 一次C++两个字符的字符到二进制转换,以获得 16 位二进制形式
- 如何从字符串中一次选择两个字符?到达字符串的第 i 个位置
- C++:一次阅读一个字符,直到一行的末尾不起作用
- 我正在阅读文件,但在阅读时,它是阅读最后一个字符一次额外