当我使用循环时,C 如何读取字符和换行符?

how the C read the character and Line break when i use loop?

当我尝试循环时,我发现了一些疑问。

  1. 当我第一次按"Enter"时,它打印两个空行,第二次,它再打印两个空行并执行下面的语句。

  2. 当我按 "Enter" 然后按“#”,再按 "Enter" 它不会结束。

我想知道为什么?

while((ch = getchar()) != '#')
{
    putchar(ch);
    while(getchar() != '\n')
            ;
    printf("\nEnter next word.");
}

我想了解它是如何工作的。

正如评论中所建议的那样,我建议使用调试器逐步执行此程序。逐行查看正在发生的事情是了解正在发生的一切和提高编码技能的最佳方式。

也就是说,当您在 most 系统上安装交互式程序时,了解一些 getchar 默认情况下的操作会有所帮助。当您第一次调用 getchar 时,它将依次调用一个较低级别的操作系统函数,该函数将从标准输入 (stdin) 获取输入。例如,在 linux 上,低级函数是 read,它将从终端获得输入。

在 most 系统上,默认情况下低级函数不会 return 直到按下回车。输入的任何内容也将回显到 terminal/console,因此您将看到您输入的内容。

一旦您按下回车键 getchar 将 return 与您输入的内容相关的第一个字符。如果您键入多个字符,您对 getchar 的下一次调用将立即与您键入的下一个字符一起 return。请注意,在 Linux 上,当您按回车键时,就像您输入 '\n' 一样,但是在 Windows 上,行尾不同,因此它会像 '\r' 然后 '\n'.

所以你第一次按下 enter 时看到 2 个空行的原因是因为第一个被你的低级别 os 函数回显,然后第二个被你的 putchar 回显。 getchar 再次被调用,你的第三个空行来自回声。第四个来自你的 printf.

第二部分留给你们自己去想。