为什么getchar()在这两种情况下的工作方式不同?

时间:2016-03-07 10:19:49

标签: c character getchar nul

我正在编写用于编码字符的小程序,我在阅读NUL字符时遇到问题,也许还有其他问题。我的问题是这段代码中的getchar以某种方式忽略了CTRL + @输入的NUL字符。

function logout() {
    session_destroy();
    redirect('/login');
} 

但是这段代码可以正常工作并正确读取NUL字符。

while ((numberOfRead < 40) && (character = getchar()) && (character != EOF) && (character != '\n')) { ... }

导致问题的区别是什么?感谢您对此行为的任何解释。代码在Windows 8.1上在gcc 4.7.1下进行了测试

1 个答案:

答案 0 :(得分:1)

下面:

    while (... && (character = getchar()) && ...) ...

您使用character的值作为真值。当读取character是值为0的空字符时,此条件为false。

您可以执行以下操作:

    while (numberOfRead < 40
       && (character = getchar()) != EOF && character != '\n') { ... }

但是我发现你的第二个变体getchar在条件之外更具可读性。