繁体   English   中英

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

[英]Why getchar() works int these two cases differently?

我正在编写用于编码字符的小程序,但在读取NUL字符时可能还有其他问题。 我的问题是这段代码中的getchar会忽略CTRL + @输入的NUL字符。

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

但是此代码可以正常工作,并且可以正确读取NUL字符。

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

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

这里:

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

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

您可以执行以下操作:

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

但我发现条件之外的带有getchar第二种变体更易读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM