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

绝对运行

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

  1. 当我第一次按“ Enter”键时,它打印两个空白行,第二次,它又打印两个空白行并执行以下语句。

  2. 当我按“ 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函数将第一条回显,然后您的putchargetchar再次被调用,您的第三个空白行来自回声。第四位来自您printf

我将把第二部分留给您自己解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在使用流读取文件时保留换行符-Java 8

如何从用户读取字符串直到遇到换行符(Java)?

当我使用Java中的Scanner Class读取.txt文件时,如何仅读取字符串或整数?

如何使用换行符@在python上读取csv

当我使用document.execCommand(“ copy”)时,javascript换行符不适用

在Ruby中读取文件时如何删除换行符

如何使用.NET(具有任何换行符)获取字符串中的行数

使用Python读取csv时指定换行符('\ n')

当我使用init(contentsOfFile :)创建一个字符串时,为什么还有一个额外的换行符?

遇到换行符时使用getline退出循环

使用javascript读取时,textarea值属性会忽略换行符和空格

当我在React中返回数组时如何添加换行符?

当行分隔符是换行符并且csv数据中包含换行符时,如何使用fs readfile读取csv?

使用java.util.Scanner从文件中读取字符串并使用换行符作为分隔符时,字符串的行为异常

如何使用Bash删除行首的换行符和字符?

如何使用换行符读取字符串并将其存储到Pandas数据框或python列表中

使用换行符中断C ++中的循环

从Config :: Simple配置文件中使用换行符存储和读取字符串

使用正则表达式提取字符串和换行符(/ n)之间的文本

每次使用c ++时,使用getchar()获取字符并将它们保存到换行符中

使用JavaScript解析换行符,空格和“ \”字符

为什么读取时使用默认的IFS和单个变量添加换行符?

如何使用Linq在换行符和空格处拆分字符串?

仅当字符串流包含任何换行符时,才如何读取它?

使用 C++ 读取文件时省略换行符

用换行符和空格读取字符串

显示字符串时如何显示换行符?

如何在没有换行符的情况下使用 getchar() 读取字符?

如何使用 Perl 替换包含字符 '/' 和换行符的多行?