这是一个在屏幕上打印txt文件的所有字符的简单代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
int **i;
int j,k;
char a;
ifstream test("test.txt", ios::binary);
while((a=test.get())!=-1)//if I use "while(!test.eof())" here, how to avoid the output of the last character(-1) to std::cout, or any ostream objects?
{
putchar(a);//also change this to putchar(test.get());
}
getchar();
}
正如我在代码中所提到的,如果我使用“test.eof()”来判断test.txt的结尾,我将总是在输出的末尾得到一个额外的空白。如何避免呢?
答案 0 :(得分:1)
你想:
int a;
get()函数返回一个int,而不是一个char - 这在C中是相同的 - 当使用getchar()时,你读入一个int变量而不是char。所以你的循环看起来像:
while( ( a = test.get() ) != EOF )
注意你想要EOF,而不是eof()。使用eof()的版本看起来像这样:
char c;
while( test.get( c ) ) {
putchar( c ); // or whatever
}
if ( test.eof() ) {
// Ok, we finished because of end of file
}
else {
// finished not because of end of file - probably an error
}
答案 1 :(得分:0)
get
方法只会在尝试读取EOF后设置eof
错误位。这就是为什么你得到while (!test.eof())
案件的额外空白。
通常,在检测到发生EOF之前,您必须先阅读EOF。也许你可以这样做:
char c = test.get();
while (!test.eof()) {
putchar(c);
c = test.get();
}
或改写为:
for (char c = test.get(); !test.eof(); c = test.get()) {
putchar(c);
}