为什么在执行此特定练习的C代码时,我的CMD会打印[?]?

时间:2017-10-26 04:15:13

标签: c

我正在从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和记事本++

2 个答案:

答案 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之后,10

您需要考虑您拥有的额外括号以及放置它们的位置。