我正在从K&R编程书中学习C,我的很多代码对于大多数练习来说都很好。除了这个特殊的练习,当我在 Windows 10 上通过 CMD 执行它时,在我输入字符并按回车键后,结果是一个带有 0101 的框。[?].
练习 1-9
示例:执行代码后,我将在cmd行中输入"hello"作为输入,一旦我按回车键,结果就是.
我感谢所有的回答,非常感谢。
编辑:
#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 和记事本++
问题是这一行:
while((c = getchar() != EOF)) {
它应该是:
while((c = getchar()) != EOF) {
使用您的版本,您实际上将 getchar() != EOF
的值分配给 c
。这通常是1
,除非达到EOF
,在这种情况下,它将0
。
这是一个运算符优先级问题。
表达式 c = getchar() != EOF
等于 c = (getchar() != EOF)
。 即您将getchar() != EOF
的结果分配给变量 c
。在此之后c
将是 1
或 0
.
需要考虑你拥有的那些额外的括号,以及把它们放在哪里。