先上代码
#include"stdio.h"
#include"string.h"
int main()
{
int a;
char s[10];
scanf("%d", &a);
gets(s);
printf("%d\n", a);
printf("%s\n", s);
return 0;
}
简单地要求输入一个整数和一个字符串,并将其分别存放到变量 a 和 数组 s 中,最后依次输出变量 a 和 s 的值
但实际输出有点出乎意料, 在我输完数字按下回车时,就提示程序已经结束了,字符串还未来得及输入呢。
产生这一现象的原因是scanf() 函数与 gets() 函数读取字符串的方式不一样所导致的。
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符
在测试案例中,输入数字10按下回车键以后,计算机会将10 以及 回车符送入输入流缓冲区,scanf() 函数从缓冲区中读取10,遇到回车后结束,
并将10赋值给a, 而gets()函数从缓冲区中读取了回车符,将其舍弃后将空值赋给了s,故最后s无输出
解决方案也很简单,在scanf() 函数后补充一个getchar() 函数,吸收回车符即可
<