3

我有这段代码:

... 
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 你是对的!在我将 operator>> 更改为:

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;
}

非常感谢!

由于我是论坛的新手,我不知道如何评价子评论;如果我只给这个帖子的一个官方回复打绿色支票可以吗?

4

2 回答 2

2

你需要清除cin。它正在读取前一个 cin 的“输入”。

cin.clear();

我还记得做了一些类似的事情:

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

这篇文章中的更多信息:

如何刷新 cin 缓冲区?

于 2011-04-20T23:33:53.903 回答
1

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

于 2011-04-21T00:38:40.113 回答