【问题标题】:Explanation about detecting end of line in CC中检测行尾的解释
【发布时间】:2019-09-18 12:23:13
【问题描述】:

我正在阅读/练习这本关于 C 语言的书:“C Programming - A Modern Approach 2”,我偶然发现了这段代码,它的解释对我来说很奇怪:

由于 scanf 通常不会跳过空格,因此很容易检测到输入行的结尾:检查字符是否刚好 read 是 换行 字符。例如下面的循环 将读取并忽略当前输入中的所有剩余字符 行:

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

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

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

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

“以下循环将读取并忽略当前输入行中的所有剩余字符”实际上是什么意思?

【问题讨论】:

    标签: c scanf newline


    【解决方案1】:

    ...这是什么目的...

    有关了解此代码 sn-p 可用于什么的上下文,请查看 this link 讨论 stdio 缓冲。 用最简单的逻辑术语来说,这种技术使用放置在 stdin 中的内容,直到看到 newline 字符。 (来自用户点击<enter> 键。)这显然是教训。
    这有效地清除了stdin 内容缓冲区,也描述了in this more robust example

    还有什么作用

    "下面的循环将读取并忽略所有剩余的字符 当前输入行”

    实际上是什么意思?

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

    表示如果scanf刚刚读取的新char不等于换行符,定义为\n,下次读取时会继续覆盖c。一旦ch 等于\n,循环将退出。

    【讨论】:

    • 我对问题措辞的印象是 OP 不知道输入缓冲。
    • @Richard - 好点。我已经添加了几行,以及涉及到的链接。谢谢
    • 正如@RichardChambers 指出的那样,我对编程很陌生,我只知道 C 的基础知识(如果我知道的话)。所以第一部分暂时不在我的掌控之中。尽管如此,多亏了你解释的第二部分,我明白了我错过的一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多