经常在别人写的oj代码里看到类似如下的代码行:
scanf("%d",&N);
getchar();
gets(buf);
即gets()前会有一个getchar(),不禁疑问,为什么需要一个getchar()处理前面输入号码后的回车符的问题。
因为scanf不接收空白符,缓冲区里还会留下上一次输入最后的换行符\n,所以需要用getchar()
我做了如下实验
#include<stdio.h>
int main(){
char buf1[1000];
char buf2[1000];
gets(buf1);
gets(buf2);
puts(buf1);
puts(buf2);
return 0;
}
输入为:hello+回车+回车
输出如下:
注:puts() 输出字符串并换行
#include<stdio.h>
int main(){
char buf1[1000];
char buf2[1000];
char buf3[1000];
gets(buf1);
scanf("%s",buf2);
gets(buf3);
puts(buf1);
puts(buf2);
puts(buf3);
return 0;
}
输入为:hello+回车+hello+回车
输出如下
#include<stdio.h>
int main(){
//char buf1[1000];
char buf2[1000];
char buf3[1000];
//gets(buf1);
scanf("%s",buf2);
gets(buf3);
//puts(buf1);
puts(buf2);
puts(buf3);
return 0;
}
输入为hello+回车
输出如下
#include<stdio.h>
int main(){
//char buf1[1000];
char buf2[1000];
char buf3[1000];
//gets(buf1);
scanf("%s",buf2);
getchar();
gets(buf3);
//puts(buf1);
puts(buf2);
puts(buf3);
return 0;
}
输入:hello+回车+hello+回车
输出如下