#include <stdio.h>
int main(void)
{
int a;
scanf(" %d ", &a);
printf("\n%d", a);
return 0;
}
当我输入并按回车键时,它等待另一个值,在给出第二个值后,它显示输出我给它的开头。为什么? scanf()
遇到格式字符串中的空格时会做什么?
答案 0 :(得分:3)
当格式字符串中有空白时,scanf()
会消耗零个或多个空白字符,直到遇到非空白字符。换行符是空格。
因此,特别是对于交互式输入,格式字符串中的尾随空格是个坏主意!在您的代码中,删除尾随空格。 (请注意,您可以在第一个数字后输入任何内容,而不仅仅是另一个数字,代码将报告您输入的第一个数字;额外的数据可用于另一个读取操作,即使您的程序实际上没有读取它。)
大多数转换规范也会忽略前导空格。例外情况为%c
,%n
和%[...]
(最后一项是扫描集转换规范)。
答案 1 :(得分:2)
更改
scanf(" %d ",&a);
到
scanf("%d",&a);
否则scanf
将等到您传递非空格字符。
答案 2 :(得分:1)
来自here:
该函数将读取并忽略任何空格 在下一个非空白字符之前遇到的字符 (空格字符包括空格,换行符和制表符 - 见isspace)。格式字符串中的单个空格验证任何内容 从流中提取的空白字符数量(包括 无)。
所以改变
scanf(" %d ",&a);
到
scanf("%d",&a);