当我尝试循环时,我发现了一些疑问。
当我第一次按“ Enter”键时,它打印两个空白行,第二次,它又打印两个空白行并执行以下语句。
当我按“ Enter”然后“#”,再按“ Enter”时,它不会结束。
我想知道为什么?
while((ch = getchar()) != '#')
{
putchar(ch);
while(getchar() != '\n')
;
printf("\nEnter next word.");
}
我想了解它是如何工作的。
如注释中所建议,我建议使用调试器逐步执行该程序。逐行查看正在发生的事情是了解正在发生的举动并提高您的编码技能的最佳方法。
也就是说,getchar
在大多数系统上都有交互式程序时,了解默认情况下的操作将很有帮助。getchar
首次调用时,它将依次调用较低级别的操作系统功能,该功能将从标准输入(stdin
)中获取输入。例如在Linux上,低级函数是read
从终端获取输入的。
在大多数系统上,默认情况下将发生,直到按下回车键,低级功能才会返回。键入的任何内容也将回显到终端/控制台,因此您将看到所键入的内容。
按下Enter键后,getchar
将返回与您输入内容有关的第一个字符。如果您键入多个字符,您的下一个呼叫getchar
将立即与您键入的下一个聊天对象一起返回。请注意,在Linux上,当您按Enter键时,将像您键入的一样'\n'
,但是在Windows上,行尾是不同的,因此将类似于'\r'
then '\n'
。
因此,您第一次点击Enter时会看到2条空行的原因是,低级os函数将第一条回显,然后您的putchar
。getchar
再次被调用,您的第三个空白行来自回声。第四位来自您printf
。
我将把第二部分留给您自己解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句