零基础学C语言 笔记四 Scanf函数清除缓冲区
2015-08-22 15:15
459 查看
Scanf函数清除缓冲区
之前涉及到scanf会先到缓冲区看看是否存在数据,若存在数据,就直接拿缓冲区的数据过来使用,这就涉及到了一个问题,那如果缓冲区的数据不是我想要的呢?
方法一:我们用scanf吸收掉
我们的代码这样写:
效果如下:
但是这个方法有一个不好的地方就是若用户输完第一个整数之后,会按好几个回车,那我们这个方法就不能满足了。
方法二:我们用rewind(stdin)来清除缓存,代码如下:
这个有个好处就是,当我们输入第一个整数之后,整数后面我们可以输入空格,tab 都对我们接下来要输入的字符无影响,因为我们会清除掉缓存,效果如下:
之前涉及到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 都对我们接下来要输入的字符无影响,因为我们会清除掉缓存,效果如下:
相关文章推荐
- c++之带默认形参值的函数
- 零基础学C语言 笔记三 三种方法交换两个变量的值
- c++引用返回值
- Effective C++ 条款10 令operator=返回一个reference to *this 条款11 在operator=中处理"自我赋值"
- C++打印杨辉三角形
- Effective C++ 条款9 决不在构造和析构过程后调用虚函数
- bcb 6.0工程平移C++ builder xe8环境
- C++基础知识
- 二叉树的前、中、后序遍历与重构问题
- 归并排序(C/C++)
- C++ 4 种具有更 为准确语义的新强制转换类型
- C Primer Plus 学习笔记
- c++ primer 复习-函数
- C++内存分配一:C++程序内存的基本组成
- C语言求素数的算法
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- C++ int类型转换string类型
- C++常见面试
- C++面试常见题目问与答(汇总一)
- POJ C++程序设计 编程题#4:魔兽世界之一:备战