【发布时间】:2022-01-20 19:34:29
【问题描述】:
在接下来的 sn-p 中,读取 int 后,'\n' 保留在 stdin 中,并由第二个 scanf 读取。
是在输入时调用scanf,然后读取标准输入中的内容,还是在输入发生之前调用它?
scanf 输入准备就绪的信号是什么?例如,如果我在键盘上键入 12345,而 scanf 正在读取一个 int,则可以将其读取为 1、12、123 ... 如果输入是要读取的信号,为什么 scanf 不从标准输入中清除该字符?
#include <stdio.h>
int main()
{
int a;
scanf( "%d", &a );
char b;
scanf( "%c", &b );
printf( "%d %c", a, b );
return 0;
}
【问题讨论】:
-
在sn-p中,
b将读取a的条目留下的'\n'。要正确使用" %c"作为格式字符串,格式字符串中的前导空格将消耗空格('\n'是空白,space、tab等。)始终验证scanf()的返回.返回是发生的成功转换的数量。所以if (scanf ("%d", &a) == 1)你知道提供了一个有效的整数。 (除了检查EOF之外,不需要使用"%c"进行验证。) -
感谢您的回答! scanf 在 '\n' 之前调用,并等待它?
-
scanf不使用尾随空格。上面的评论让您可以在下一次转换之前使用它。 -
当您在输入
a的值后按[Enter] 时,会将'\n'插入到输入流中。如果您没有考虑换行符 - 您的下一次尝试读取将读取\n'。这也是鼓励您使用fgets()获取所有用户输入的主要原因,这是一个足够大的缓冲区,然后使用sscanf()从缓冲区解析任何需要的信息。fgets()将消耗尾随'\n' -
所以任何空白都可以向 scanf 发出信号来读取?