我正在阅读/练习有关C语言的书:“ C编程-一种现代方法2”,我偶然发现了这段对我来说很奇怪的代码:
自 scanf 通常不跳过空格,很容易检测到输入行的结尾:检查字符是否只是 就是 换行符 字符。例如,以下循环 将读取并忽略当前输入中的所有剩余字符 行:
do {
scanf("%c", &ch);
} while (ch != '\n');
scanf 下次调用时,它将读取下一个输入行上的第一个字符。
我了解代码的功能(当它检测到 enter 或'\n'
时退出循环),而不是课程(?)。
这是什么目的,因为要将用户的输入存储到&ch
中,您必须按 enter 键(退出循环)?
“随后的循环将读取并忽略当前输入行中的所有剩余字符”的实际含义是什么?
答案 0 :(得分:1)
...这个目的是什么 ...
要了解本文的功能,请参阅 this link 讨论stdio缓冲。
用最简单的逻辑术语来说,此技术会消耗放置在 stdin 中的内容,直到看到newline
字符为止。 (来自用户按下<enter>
键的过程。)显然,这就是课程。
这有效地清除了stdin
内容缓冲区,也描述了 in this more robust example 。
还有什么
”以下循环将读取并忽略其中的所有剩余字符 当前输入行”
是真的意思吗?
do {
scanf("%c", &ch);
} while (ch != '\n');
这意味着,如果char
读取的新scanf
不等于换行符(定义为\n
),它将继续用{下次阅读。一旦c
等于ch
,循环将退出。