如何使它读cin两次
How to make it read cin twice?
我有这段代码:
...
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字符
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 必须使用 cin.getline() 按回车键两次
- cin.ignore() 输入两次以获得一次暂停
- 为什么必须键入 getline(cin,字符串)两次
- 当循环时,在c++中的cin.get()之前循环两次
- 两次读取std::cin的输入
- 为什么不能连续两次使用std::cin.getline() ?
- 两次使用cin时的意外行为
- 为什么while循环使用cin.get()函数输出两次结果?
- 如何使它读cin两次
- 在使用cin时,是否有必要将一个变量存储两次
- 是否有重定向(cin)输入从文本文件在控制台两次,为c++