#include "stdio.h"
using namespace std;
int main () {
char str[20];
scanf("%s", str); //输入bei jing
printf("%s", str);
char str2[20]; //输入bei jing
gets(str2);
puts(str2);
return 0;
}
会发生什么呢?
实测结果:
输入bei jing后程序立即输出了bei jing并立即结束了!没有给你第二次输入的机会。
原因很简单,因为scanf遇到bei后面的空格就结束了,所以printf了bei
这时候(空格)jing放在了缓冲区,被gets读走了,接着puts了(空格)jing,就形成了这样的效果。
#include "stdio.h"
using namespace std;
int main () {
char str[20];
scanf("%s", str);
printf("%s", str);
getchar();
char str2[20];
gets(str2);
puts(str2);
return 0;
}
两次输入之间加了一条getchar();
可见getchar把空格吸收了。
缓冲区是个好东西,但有时在你不经意之间有些多余的数据进入了缓冲区,抢占了你的下一次输入语句命令的时机。
也许对于高手大佬,这是很简单的内容,不值一哂,但却常常引起新手的困扰。