如何在C ++中使用以下输入

时间:2011-11-01 05:43:04

标签: c++ iostream

我必须使用可变数量的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个值是垃圾。

4 个答案:

答案 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使用它。