我试图理解scanf
函数是如何工作的。有如下代码示例:
scanf("%c", &chr);
当我按下输入时只有enter
键,它会立即返回char
变量0ah
值,但代码如下:
scanf("%s", str);
当我按下输入时只有enter
键,它等待输入非空白字符。
以下是我的问题:
enter
键后才返回?答案 0 :(得分:2)
scanf返回的真实条件是什么?
scanf返回读取的输入数量。
scanf(" %c", &chr)
- 这里scanf()
正在寻找一个角色,由于换行符(' \ n')确实是一个角色,所以该程序并不会问问题,它只是选择了换行符并继续前进。
%c不会跳过空格。最简单的方法是在%c - scanf(" %c", &chr);
只是提示: - 为什么要避免使用scanf? http://c-faq.com/stdio/scanfprobs.html
答案 1 :(得分:1)
第一个问题与scanf()
无关,而是缓冲。
stdin
通常是行缓冲。通常,在scanf()
输入之前,'\n'
不会给予任何内容。
第二
从(行缓冲)scanf("%c",...)
获得1个字符后, stdin
返回。任何1个字符,如'A'
,'0'
,' '
,'\n'
,'\0'
都会被读取。 stdin
中的其他字符保持缓冲以供后续阅读。函数返回1.
scanf("%s", str)
有三个操作阶段:
' '
,'\t'
,'\n'
,'\r'
以及其他一些空白区域,直到非白色空格找到下一步。 (此应用程序适用于除%
以外的所有%c %n %[
说明符。)str
。这将继续,直到读取空白区域。stdin
。 (unget)并将空字符附加到str
。 str
现在是字符串。 stdin
中的其他字符保持缓冲以供后续阅读。函数返回1。如果文件结尾(stdin
已关闭)或罕见输入错误,则还有其他问题。