Scanf函数清除缓冲区
之前涉及到scanf会先到缓冲区看看是否存在数据,若存在数据,就直接拿缓冲区的数据过来使用,这就涉及到了一个问题,那如果缓冲区的数据不是我想要的呢?
方法一:我们用scanf吸收掉
我们的代码这样写:
int main(int argc, const char * argv[]) {
printf("请输入一个整数\n");
int num1;
scanf("%d",&num1);
printf("请输入一个字符\n");
char c;
scanf("%c",&c);//吸收掉一个回车
scanf("%c",&c);
printf("num1= %d ,c= %c\n",num1,c);
return 0;
}
效果如下:
但是这个方法有一个不好的地方就是若用户输完第一个整数之后,会按好几个回车,那我们这个方法就不能满足了。
方法二:我们用rewind(stdin)来清除缓存,代码如下:
int main(int argc, const char * argv[]) {
printf("请输入一个整数:\n");
int num1;
scanf("%d",&num1);
rewind(stdin);
printf("请输入一个字符\n");
char c;
scanf("%c",&c);
printf("num1=%d,c=%c\n",num1,c);
return 0;
}
这个有个好处就是,当我们输入第一个整数之后,整数后面我们可以输入空格,tab 都对我们接下来要输入的字符无影响,因为我们会清除掉缓存,效果如下: