5.4.2节练习--- c++中多次cin会出现的问题。

来源:互联网 发布:怎么做数据分析 编辑:程序博客网 时间:2024/06/06 14:11

练习5.17

#include <iostream>  #include <string>#include <vector>using namespace std;int main(){vector<int> num1, num2;int a = 0,b=0;cout << "请输入num1的元素:" << endl;while (cin >> a)num1.push_back(a);cin.clear();cin.sync();cout << "请输入num2的元素:" << endl;while (cin >> b)num2.push_back(b);auto num_min = (num1.size() > num2.size()) ? num2 : num1;auto num_max = (num1.size() < num2.size()) ? num2 : num1;//注意,vector是可以拷贝初始化的,这与数组不同。auto i = num_max.cbegin(), j = num_min.cbegin();while (j != num_min.cend() && (*i == *j)){++i;++j;}if (j == num_min.cend())cout << "他们中较短者是较长者前缀" << endl;system("pause");return 0;}


在这个程序中,有一个比较有趣的问题,就是程序出现了两次cin>>

while (cin >> a)num1.push_back(a);cin.clear();cin.sync();cout << "请输入num2的元素:" << endl;while (cin >> b)num2.push_back(b);
当我第一次编写程序时,没有添加
cin.clear();cin.sync();

即:

while (cin >> a)num1.push_back(a);
cout << "请输入num2的元素:" << endl;while (cin >> b)num2.push_back(b);

结果会导致什么呢?

即输入 1 2 3 4 回车 ^z 回车 直接输出“请输入num2元素”然后结束,就是没有给第二个while(cin>>b)输入。同样我输入1 2 3 4 ^z 回车是一模一样的结果。


原因在哪?我看了其它人的一些回答,比较认同,贴出来看看:


我认为是这样的,^z后代表整个输入流结束了,即使后面有cin,也不会在读入数据了。

那么解决办法是加上这两条:

cin.clear();cin.sync();
不能只加cin.clear()。否则还是会和之前的结果一样。


由于还没有学到流错误等相关知识,难免会理解不正确,请大家指正!

0 0