怎么让它读两次cin?

时间:2011-04-20 23:29:41

标签: c++ cin

我有这段代码:

... 
ComplexNumber C1;
ComplexNumber C2;

cout << "Enter a complex number C1:" << endl;
cin >> C1;
cout << C1 << endl;
cout << "Enter a complex number C2:" << endl;
cin >> C2;
cout << C2 << endl;
...

但是我发现它不会再次等待用户输入,只会让C2保留我为ComplexNumber类中的零参数构造函数定义的默认值,然后继续。

我在此问题中找到的所有解决方案都使用getline()而不是cin&gt;&gt; ,但这项任务是测试我们的opperator超载程度&gt;&gt;对于我们的ComplexNumber类,所以我认为使用getline会破坏这个目的。有没有其他方法可以使这项工作?

修改: @Martin你是对的!它在我更改了我的运算符&gt;&gt;之后有效。致:

istream & operator>>(istream & in, ComplexNumber & n) 
{
    int inreal=0;
    int inimag=0;
    in >> inreal;
    char plus;
    in.get(plus); // read the plus sign since it's a char
    in >> inimag;
    char i;  // DID NOT HAVE THIS LINE AT FIRST
    in.get(i); // DID NOT HAVE THIS LINE AT FIRST
    n = ComplexNumber(inreal,inimag);
    return in;
}

非常感谢你!

由于我是论坛的新手,我不知道如何评价分评论;如果我只是对这篇文章的官方回复进行绿色检查,是否可以?

2 个答案:

答案 0 :(得分:2)

你需要清除cin。它正在读取前一个cin的'enter'。

cin.clear();

我还记得按照以下方式做的事情:

cin.ignore(cin.rdbuf()->in_avail());

此帖中的更多信息:

How do I flush the cin buffer?

答案 1 :(得分:1)

我打赌你没有从输入流中读取i字符