我有这个密码
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char **argv) {
ifstream in;
in.open(*(argv+1));
char c;
while (true) {
if (in.eof())
break;
c = in.get();
cout << c;
}
in.close();
return 0;
}
我读取了通过命令行传递的文件作为第一个参数。在阅读文件时,我得到了字符'?'作为最后一个参数。为什么?
如果我去掉这条线
in.open(*(argv+1));
我只会得到一个字符'?'。
2条答案
按热度按时间isr3a4wc1#
在
while
循环中,您最终阅读eof
:这不是读取文本文件的最佳方法,请使用
或
如果您希望白色(如
\n
)。如果您的文件是二进制的,那么显示它没有太大意义,但是如果您愿意,那么可以使用
get()
,但是在进一步处理之前测试if(!in) break;
如果只想显示文件,最简单的方法是直接使用流缓冲区,如
相关:Why is iostream::eof inside a loop condition (i.e.
while (!stream.eof())
) considered wrong?wfsdck302#
istream::get()
方法从输入流返回一个 untranslated 值。如果该值不可打印,您的控制台可能会将该字符转换为“?”。
更好的方法是将字符的值与字符沿着打印:
这将允许您看到无法打印的字符。