0

我正在编写用于编码字符的小程序,我在读取 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 下

4

1 回答 1

1

这里:

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

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

您可以执行以下操作:

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

但我发现您的第二个变体与getchar外部条件更具可读性。

于 2016-03-07T10:29:53.227 回答