如何使它读cin两次

How to make it read cin twice?

本文关键字:两次 cin 何使它      更新时间:2023-10-16

我有这段代码:

... 
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>>,但是这个赋值是为了测试我们为ComplexNumber类重载操作符>>的效果如何,所以我认为使用getline会破坏这个目的。还有别的办法吗?

编辑:@Martin你是对的!在我将操作符>>更改为:

后,它可以工作。
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;
}

非常感谢!

因为我是新来的论坛,我不知道如何给一个分评论信用;如果我只给这个帖子上的一个官方回复绿色支票可以吗?

您需要清除cin。它正在从前面的cin中读取'enter'。

cin.clear();

我还记得做过这样的事情:

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

更多信息在这篇文章:

如何刷新cin缓冲区?

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