对fflush(stdin)功能以及实际应用的个人体会,对初学者应该挺有用
来源:互联网 发布:篡改或者伪造监测数据 编辑:程序博客网 时间:2024/05/28 04:54
fflush(stdin)的功能是清空输入缓冲区,至于什么是输入缓冲区,在下面会有解释。
举个例子,“现在要求往一个整型数组里输入3个整数,并且输出指定序号对应的元素”。比如输入11,12,13,之后输出第2个元素,应该输出12。代码如下:
#include "iostream"
using namespace std;
int main()
{
int elem[20] = { 0 };//定义一个长度为20的整型数组,且其元素都为0
cout << "请输入3个元素,组成一个长度为3的简单顺序表" << endl;
for (int i = 0; i < 3; i++)//输入元素
cin >> elem[i];
cout << "请输入一个序号" << endl;
int m;
cin >> m;
cout << "序号" << m << "对应的元素是" << elem[m-1] << endl;
system("pause");
return 0;
}
{
int elem[20] = { 0 };//定义一个长度为20的整型数组,且其元素都为0
cout << "请输入3个元素,组成一个长度为3的简单顺序表" << endl;
for (int i = 0; i < 3; i++)//输入元素
cin >> elem[i];
cout << "请输入一个序号" << endl;
int m;
cin >> m;
cout << "序号" << m << "对应的元素是" << elem[m-1] << endl;
system("pause");
return 0;
}
下图是正常执行步骤,输入元素后 输出指定序号对应的元素。
然而有这么一种情况,输入的元素个数多于要求输入的个数,就会出错,如下图。
当我不仅仅输入11,12,13,而是多输入一个14的时候,程序就不再让我输入一个序号而是直接输出序号和元素,产生这个结果的原因就是输入缓冲区未清空。
我们的电脑的内存空间里有这么一部分叫作做输入缓冲区,当我们在键入数字或字符等元素时,这些元素会先存到输入缓冲区里,并不是直接放在内存上的。与输入缓冲区对应的还有输出缓冲区,统称为缓冲区,这里就不详细介绍,可自行百度。简单来说,缓冲区的作用是节省计算机的操作时间。
我们继续说输入缓冲区未清空导致的结果,我们输入11,12,13,14时,
for (int i = 0; i < 3; i++)//输入元素
cin >> elem[i];
cin >> elem[i];
这段代码只从输入缓冲区中取走了前3个元素11,12,13,所以14还留在输入缓冲区中。
那么,
cout << "请输入一个序号" << endl;
int m;
cin >> m;
int m;
cin >> m;
中的cin>>m就会直接把输入缓冲区中的14赋给m,而不是让用户再输入。
所以,既然m已经有14这个值了,程序就会按照这个数值执行后面的代码。
那么,fflush(stdin)的功能就可以应用到这里了,在
cout << "请输入一个序号" << endl;
int m;
cin >> m;
int m;
cin >> m;
前面加上fflush(stdin);,清空一次输入缓冲区,即把14清除。
这样,就可以解决多输入的问题了。
修改后的完整代码如下:
#include "iostream"
using namespace std;
int main()
{
int elem[20] = { 0 };//定义一个长度为20的整型数组,且其元素都为0
cout << "请输入3个元素,组成一个长度为3的简单顺序表" << endl;
for (int i = 0; i < 3; i++)//输入元素
cin >> elem[i];
fflush(stdin);
cout << "请输入一个序号" << endl;
int m;
cin >> m;
cout << "序号" << m << "对应的元素是" << elem[m-1] << endl;
system("pause");
return 0;
}
using namespace std;
int main()
{
int elem[20] = { 0 };//定义一个长度为20的整型数组,且其元素都为0
cout << "请输入3个元素,组成一个长度为3的简单顺序表" << endl;
for (int i = 0; i < 3; i++)//输入元素
cin >> elem[i];
fflush(stdin);
cout << "请输入一个序号" << endl;
int m;
cin >> m;
cout << "序号" << m << "对应的元素是" << elem[m-1] << endl;
system("pause");
return 0;
}
修改之后的执行结果,如下图:
阅读全文
0 0
- 对fflush(stdin)功能以及实际应用的个人体会,对初学者应该挺有用
- 对初学者会有用
- 对MATLAB初学者有用的东西
- 对Verilog 初学者比较有用的整理
- fflush(stdin)的对错?
- 初学者对于时间复杂度的直观体会以及对递归调用数数的心得
- 个人对软件工程开发的一点体会
- 个人对设计模式的体会
- 个人对SQLite使用的一些体会
- 个人对C\C++的体会
- 初学者应该看看,感觉挺有用的
- 习惯对功能说“不”:对功能取舍的体会
- 初学者对Thread 的个人心得
- STM32的can现场总线实验心得(对初学者应该比较有用,有不对的地方望大侠指出)
- JavaScript实际应用:对层的控制
- JavaScript实际应用:对层的控制
- JavaScript实际应用:对层的控制
- 脚本中对层的实际应用
- 无法定位序数5076与动态链接库MFC42D.DLL 的解决方法
- HDU 5676 ztr loves lucky numbers
- C++ 浅拷贝和深拷贝
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
- 第一次课的笔记
- 对fflush(stdin)功能以及实际应用的个人体会,对初学者应该挺有用
- JAVA设计模式之责任链模式
- Js实现音乐播放控制条
- matlab2c使用c++实现matlab函数系列教程-rand函数
- jquery的ajax后台后去数据的table切换
- Apache优化
- javascript性能优化方面的知识总结
- Codeforces Round #432 (Div. 1) B. Arpa and a list of numbers
- VB程序逆向常用的函数