当我们先输入一个整型类的数后,再用gets输入一个字符串,在这之间会出现问题。
#include"stdio.h"
int main()
{
char a[1000];
int n;
scanf("%d",&n);
printf("接收\n");
gets(a);
printf("输出:%s\n", a);
printf("输出结束\n");
return 0;
}
输入:1
输出:
1
接收
输出:
输出结束
我们把这个换行符打印出来:
#include"stdio.h"
int main()
{
char a[1000];
char ch;
int n;
scanf("%d",&n);
ch = getchar();
printf("字符为[%c]\n", ch);
return 0;
}
运行结果:
1
字符为[
]
原因是scanf()会把换行符保留在缓冲区中,当下一次读的时候会作为它的输入。
解决办法一:
把gets()换成scanf(),scanf会避免这种情况。
解决办法二:
在scanf("%d", &n);后面紧跟一个getchar(),用来吃掉换行符