这是我的代码示例。我在评论中写了这个问题:
main(){
long cnt; // chars count
int c;
/* Why the 'for' cicle doesn't finish when I input the
* "a^Z" string and press ENTER? At this case '^Z' is
* CTRL + Z (i.e this is EOF). I expected the second loop
* will get the EOF (i.e. -1), but it has 26 instead of. Why?
*/
for(cnt = 0; (c = getchar()) != EOF; ++cnt)
;
printf("Chars count: %ld", cnt);
}
如果我提出a
,ENTER
,CTRL
+ Z
,ENTER
,那么我会得到预期结果:CTRL
+ { {1}}打破了循环。
UPD
当我阅读有关Z
函数的信息时,我发现它使用行缓冲输入。它期望getchar
用于推送数据。我没有看到还在获取ENTER
时可以推送数据的信息。因此我预计在我的情况下第二个值将是Ctrl - Z
(并且循环将被破坏),即我预计我的字符串行将被解析为EOF
,a
, EOF
序列。
答案 0 :(得分:1)
当您按 a + CTRL + Z 然后按 ENTER 时, CTRL < / kbd> + Z 刷新输入(stdin
),下一个输入为\n
,不是EOF
。您需要按两次 CTRL + Z 来模拟第二个EOF
。