我必须使用可变数量的double值,然后使用一个字符来结束double值的输入(读入inData列表)。在此之后,我必须输入2个整数到i和m。
问题是,cin溢出。
我必须对节目进行以下输入
0.594
0.928
0.515
0.055
0.507
0.351
0.262
0.797
0.788
0.442
0.097
0.798
0.227
0.127
0.474
0.825
0.007
0.182
0.929
0.852
e
2 5
为此,我的代码如下:
#include <iostream>
#include <list>
#include <cstdio>
using namespace std;
int main (void)
{ list <double> inData;
double temp;
int i, m, M, N;
char a;
while (cin >> temp)
{ inData.push_back(temp);
}
N = inData.size();
//fflush(cin);
//cin >> a;
cin.ignore(1);
cin >> i >> m;
cout << (int )a << " " << N << " " << i << " ABC " << m << endl;
return 0;
}
这有什么问题..请看为什么不采用i和m的值。我和我在cout行中给出了垃圾值......
输出将成为
-65 20 233304 ABC 213344
其中第1,第3和第5个值是垃圾。
答案 0 :(得分:2)
试试这个:
cin.clear();
cin >> a;
答案 1 :(得分:2)
当cin >> temp
最终失败时(因为遇到“e”标记),failbit
将设置在cin
上,这会阻止从流中读取更多数据,直到它为止clear
编
while (cin >> temp) { inData.push_back(temp); }
N = inData.size();
cin.clear(); // <---
cin >> a >> i >> m; // no need to 'ignore' or flush anything
答案 2 :(得分:1)
我认为你想要的是:
do{
cin >> temp;
if (cin.good())
inData.push_back(temp);
} while (cin.good());
cin.clear();
而不是while循环。
a
变量不再从cin
读入,因此很可能是垃圾。
答案 3 :(得分:1)
说到线
N = inData.size();
cin一直处于无效状态。对cin的任何操作都将失败。你应该重置它的stauts和keek使用它。