【发布时间】:2021-11-03 07:46:30
【问题描述】:
我在 K&R Book 中做练习 1-9,在尝试寻找解决方案时遇到了以下代码:
int main()
{
int c;
while ((c = getchar()) != EOF) {
if (c == ' ') {
while ((c = getchar()) == ' ');
putchar(' ');
if (c == EOF) break;
}
putchar(c);
}
}
即使我输入了一个字母,为什么第一个if 语句仍然有效。据我了解,只有当我输入的字符是空格时才会执行?
顺便说一句,练习是让程序将多个连续的空格替换为一个。
【问题讨论】:
-
现在,我认为写
while ((c = getchar()) == ' ') { }而不是... ;更常见,以表明循环没有主体,只执行其条件的副作用。 -
“第一个 if 语句起作用”是什么意思?我的意思是:你对“工作”的理解是什么。该语句,特别是它的条件将始终在外部 while 循环中进行评估。
-
"为什么即使我输入了一个字母,第一个 if 语句也能工作。" “工作”是什么意思?你认为应该发生什么?你认为到底发生了什么?
-
这能回答你的问题吗? Clarifying K&R exercise 1-9
-
@KarlKnechtel 我认为它的工作原理首先是需要用户输入,然后如果我的输入包含多个空格,它将替换为一个空格。如果我的输入有字母,为什么
if (c == ' ')会起作用?我认为 c 等于我的输入。如果我输入 abc d,为什么 if 语句仍然被执行?不是只有输入一个空格才有效吗?
标签: c while-loop char whitespace getchar