我是C ++编程的新手,我遇到了障碍。这是我的代码:
#include <iostream>
using namespace std;
int main(){
int sum = 0, a;
cout << "enter first set of numbers:";
while(cin >> a) sum += a;
cout << "first sum = " << sum;
cin.clear();
cin.ignore( numeric_limits<streamsize>::max(), '\n');
sum = 0;
cout << "enter second set of numbers:";
while(cin >> a) sum += a;
cout << "second sum = " << sum;
}
我试图将在命令行输入的两组数字相加。问题是,当我点击ctrl-d终止我的第一组数字时,它会跳过第二组cin's。我在互联网上其他地方找到的大多数页面都告诉我使用cin.clear和cin.ignore。我已经尝试过了,但它仍然没有用。这个页面question concerning cin.clear()甚至似乎也有同样的问题。但是,他们认为修复不适合我。
上面的代码是否适用于其他任何人?
答案 0 :(得分:2)
当您使用Ctrl-D时,您终止输入流:没有来自std::cin
的其他字符。即使清除流也无济于事:你已经告诉流它结束了。你不能重新打开它。但是,clear()
流并使用ignore()
是您问题的解决方案!
您需要一个不同的指标来完成一组值。最简单的方法是使用非数字字符或字符串:尝试读取不是int
的内容将导致流进入故障模式[不关闭流]。也就是说,您在转换失败之前阅读,clear()
信息流,ignore()
一切直到信号线的末尾。
您的代码应该已经这样做了:不要使用Ctrl-D,只需输入,例如x
。
答案 1 :(得分:0)
//使用stringstream ^^进行多个用户输入
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main (void)
{
string mystr;
float price = 0;
int quantity = 0;
cout << "Enter price: ";
getline (cin, mystr);
stringstream(mystr) >> price;
cout << "Enter quantity:";
getline (cin, mystr);
stringstream(mystr) >> quantity;
cout << "Total price: " << price*quantity << endl;
return 0;
}
答案 2 :(得分:-1)
您可以使用Ctrl-D,只需将循环放在另一个线程中即可。所以Ctrl-D,杀死线程,然后返回你的主函数,然后你可以启动另一个线程。 它不是最好的解决方案,但它可以工作,http://codebase.eu/tutorial/posix-threads-c/