为什么 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的空字符时,则此条件为假。
您可以这样做:
while (numberOfRead < 40
&& (character = getchar()) != EOF && character != '\n') { ... }
但我发现您的第二个变体 getchar
在条件之外更具可读性。
我正在编写用于编码字符的小程序,但我在读取 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的空字符时,则此条件为假。
您可以这样做:
while (numberOfRead < 40
&& (character = getchar()) != EOF && character != '\n') { ... }
但我发现您的第二个变体 getchar
在条件之外更具可读性。