在C++中遍历可能包含0xff的十六进制输入

seb*_*ebo 2 c++ hex eof getchar

我在我的代码中遍历来自stdin的十六进制输入,我注意到当达到0xff字节时,我无法绕过我的代码.我知道这是因为循环是:

while( (c=getchar()) != EOF)
Run Code Online (Sandbox Code Playgroud)

但是,我不能把它排除在外,因为否则在真正的End-Of-File之后调用getchar并且它会出现段错误.如何正确遍历完整输入?

(对不起,我知道这个看似常见的任务应该有一个简单的答案,但我试着搜索了一段时间但什么都没发现)

Rob*_*obᵩ 6

您已声明c为char,但getchar()返回一个int.C的正确循环结构是这样的:

int c;
while ( (c = getchar()) != EOF ) {
  // use c here.
}
Run Code Online (Sandbox Code Playgroud)