用文件结束符(Ctrl+Z)结束元素输入时不要忘记将流cin恢复为有效状态
2014-12-09 11:33
260 查看
有这样一个题目:
通过标准输入给两个int型vector对象赋值。
一开始,我的程序是这样的:
但是,执行结果如下,无法给第二个vector对象输入元素:
经研究发现,原来给第一个vector对象后,由于以文件结束符(Ctrl+Z)结束,将流cin置为了无效状态;所以当第二个while循环再次以流cin作为判断条件时,直接跳出循环。故我们要首先恢复流cin的有效状态,可以通过下面的语句:
cin.clear();
整个程序如下:
正确结果如下:
其实,我们还可以有另一种解决方案,即不用文件结束符(Ctrl+Z)结束元素输入,而是用某一个条件(如输入一个指定的数字)作为循环判断条件,这样就不用担心流cin的状态了。程序如下:
故,我们要记住,如果在一个程序中要多次使用同一个流对象(如cin流),在第二次使用前要先将它恢复为有效状态。这个可以参考“流输入输出”的有关部分。
通过标准输入给两个int型vector对象赋值。
一开始,我的程序是这样的:
<pre name="code" class="cpp">#include <iostream> #include <vector> using namespace std; int main() { //通过键盘输入两个int型vector对象 vector<int> ivec1,ivec2; int ival1,ival2; cout<<"输入多个整数给vector对象ivec1(以Ctrl+Z结束输入):"<<endl; while(cin>>ival1) ivec1.push_back(ival1); cout<<"输入多个整数给vector对象ivec2(以Ctrl+Z结束输入):"<<endl; while(cin>>ival2) ivec2.push_back(ival2); return 0 }
但是,执行结果如下,无法给第二个vector对象输入元素:
经研究发现,原来给第一个vector对象后,由于以文件结束符(Ctrl+Z)结束,将流cin置为了无效状态;所以当第二个while循环再次以流cin作为判断条件时,直接跳出循环。故我们要首先恢复流cin的有效状态,可以通过下面的语句:
cin.clear();
整个程序如下:
<pre name="code" class="cpp">#include <iostream> #include <vector> using namespace std; int main() { //通过键盘输入两个int型vector对象 vector<int> ivec1,ivec2; int ival1,ival2; cout<<"输入多个整数给vector对象ivec1(以Ctrl+Z结束输入):"<<endl; while(cin>>ival1) ivec1.push_back(ival1); cout<<"输入多个整数给vector对象ivec2(以Ctrl+Z结束输入):"<<endl; cin.clear();//将流cin恢复为有效状态</span> while(cin>>ival2) ivec2.push_back(ival2); return 0 }
正确结果如下:
其实,我们还可以有另一种解决方案,即不用文件结束符(Ctrl+Z)结束元素输入,而是用某一个条件(如输入一个指定的数字)作为循环判断条件,这样就不用担心流cin的状态了。程序如下:
#include <iostream> #include <vector> using namespace std; int main() { //通过键盘输入两个int型vector对象 vector<int> ivec1,ivec2; int ival1,ival2; cout<<"输入多个整数给vector对象ivec1(以输入32767结束):"<<endl; cin>>ival1; while(ival1!=32767) { ivec1.push_back(ival1); cin>>ival1; } cout<<"输入多个整数给vector对象ivec2(以输入32767结束):"<<endl; cin>>ival2; while(ival2!=32767) { ivec2.push_back(ival2); cin>>ival2; } return 0; }
故,我们要记住,如果在一个程序中要多次使用同一个流对象(如cin流),在第二次使用前要先将它恢复为有效状态。这个可以参考“流输入输出”的有关部分。
相关文章推荐
- C++文件结束符(Ctrl+Z)后如何继续输入(cin>>)。
- C++文件结束符(Ctrl+Z)后如何继续输入(cin>>)。
- while判断值为cin输入值时,注意调试时要用文件结束符结束循环
- 第6天-3 RMAN不完全恢复】【用scn恢复到特定的时刻】【控制文件损坏】【损坏日志文件状态非INACTIVE时,数据库打不开】【增加联机日志文件】【修改所有联机日志大小同义10M】
- cin 文件结束符
- 解决cin.getline()未经输入就结束的问题
- 重装系统通过数据恢复软件找回来的数据库文件提示不是有效的SQL SERVER文件的修复案例
- 介绍如何有效使用tar、cpio和rpm工具,对文件进行存档和恢复
- 文件的输入和输出-cin用法
- 输入一串元素均不相等的自然数数列(以0结尾表示结束且0不是该数列的元素),分别求出所有的递增和递减子序列的总数目。如数列7,2,6,9,3,8,5,2,1可分为(7,2),(2,6,9),(9,8,3
- C++ 的cin输入注意【转】----cin的状态
- 输入不匹配信息后cin语句的恢复
- 介绍如何有效使用tar、cpio和rpm工具,对文件进行存档和恢复
- 为什么有时候要两次 Ctrl+Z 才能结束输入 编写程序时 ctrl+z的错误
- 关于VC++里cin输入不能正确结束的解决办法
- 备份结束恢复时遇到控制文件00214错误
- 快速结束IE保存文件时的假死状态
- 如何编码实现NTFS格式下删除文件的恢复(结束)
- ubuntu 包管理之“:E: 读错误 - read (5: 输入/输出错误) E: 无法解析或打开软件包的列表或是状态文件。”的解决
- while ((ch = getchar()) != EOF)中ch定义为char还是int型?cin、scanf等如何结束键盘输入