关于在C中检测行尾的说明

时间:2019-09-18 12:23:13

标签: c scanf newline

我正在阅读/练习有关C语言的书:“ C编程-一种现代方法2”,我偶然发现了这段对我来说很奇怪的代码:

  

scanf 通常不跳过空格,很容易检测到输入行的结尾:检查字符是否只是   就是 换行符 字符。例如,以下循环   将读取并忽略当前输入中的所有剩余字符   行:

do {
    scanf("%c", &ch);
} while (ch != '\n');
  

scanf 下次调用时,它将读取下一个输入行上的第一个字符。

我了解代码的功能(当它检测到 enter '\n'时退出循环),而不是课程(?)。

这是什么目的,因为要将用户的输入存储到&ch中,您必须按 enter 键(退出循环)?

“随后的循环将读取并忽略当前输入行中的所有剩余字符”的实际含义是什么?

1 个答案:

答案 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,循环将退出。