您的位置:首页 > 编程语言 > C语言/C++

零基础学C语言 笔记四 Scanf函数清除缓冲区

2015-08-22 15:15 459 查看
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 都对我们接下来要输入的字符无影响,因为我们会清除掉缓存,效果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: