我有这段代码:
...
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;
}
非常感谢你!
由于我是论坛的新手,我不知道如何评价分评论;如果我只是对这篇文章的官方回复进行绿色检查,是否可以?
答案 0 :(得分:2)
你需要清除cin。它正在读取前一个cin的'enter'。
cin.clear();
我还记得按照以下方式做的事情:
cin.ignore(cin.rdbuf()->in_avail());
此帖中的更多信息:
答案 1 :(得分:1)
我打赌你没有从输入流中读取i字符