我正在从K& R编程书中学习C语言,我的大部分练习都可以使用我的代码。除了这个特殊的练习,当我在Windows 10上通过CMD执行它时,在我输入字符并按回车后,结果是一个包含0101的框。 [?]。
练习1-9
示例:执行代码后,我将输入" hello"作为cmd行的输入,然后按Enter键,结果就是。
感谢所有答案,非常感谢。
编辑:
#include <stdio.h>
main(void)
{
int c;
while((c = getchar() != EOF)) {
if (c == ' ') /* find a blank */
{
putchar(' '); /* print the first blank */
while((c = getchar()) == ' ')
;
}
if (c != EOF) /*print normal character */
putchar(c);
}
}
还有一些信息:使用GCC和记事本++
答案 0 :(得分:1)
问题在于这一行:
while((c = getchar() != EOF)) {
应该是:
while((c = getchar()) != EOF) {
使用您的版本,您实际上会将getchar() != EOF
的值分配给c
。这通常是1
,除非达到EOF
,在这种情况下它将是0
。
答案 1 :(得分:1)
这是operator precedence问题。
表达式c = getchar() != EOF
等于c = (getchar() != EOF)
。即您将getchar() != EOF
的结果分配给变量c
。在此c
之后,1
或0
。
您需要考虑您拥有的额外括号以及放置它们的位置。