#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, age;
float scores;
scanf("a=%d,b=%d,c=%d", &a, &b, &c);
printf("a+b+c=%d\n\n", (a + b + c));
fflush(stdin); // 清空缓冲区
scanf("age %d score %f.", &age, &scores);
printf("age=%d, scores=%f.\n", age, scores);
system("pause");
return 0;
}
问题1:输入a=1,b=2,c=3之后,程序运行完了,不会有第二次输入?,但是明明已经fflush(stdin)了。如果注释fflush,也是一样的效果。
问题2:scanf不是行缓冲吗,行缓冲遇到回车时,不是会自动刷新缓冲区的吗,那么不需要fflush应该也可以进行第二次输入的吧?
修改如下,第一个字符为换行
scanf并不读取最后的换行符号,这个换行符号是下次scanf调用的第一个字符。
上述写法导致scanf在读取到换行后匹配不成功时立即返回,换行和a不匹配。
采用连续输入多个数字用空格分隔,用回车结束,scanf函数会忽略空白字符,不会出现上述问题,代码如下