此代码有效但不符合我的意图。每次我想通过按1
输入新工资时,命令提示符下的输出将如下所示:
Comic books : USD Input error! Salary must be in positive integer.
代码应该在第4行的cout<<"\n\nComic books\t\t: USD ";
处停止,但它只是在内部while循环中执行。这是代码:
double multiplePay =0;
cout<<"\n\nEnter employee pay for each job";
while (1){
cout<<"\n\nComic books\t\t: USD ";
//cin.get(); if enable, the first user input will be 0. this is not working.
std::string comic_string;
double comic_double;
while (std::getline(std::cin, comic_string))
{
std::stringstream ss(comic_string); // check for integer value
if (ss >> comic_double)
{
if (ss.eof())
{ // Success so get out
break;
}
}
std::cout << "Input error! Salary must be in positive integer.\n" << std::endl;
cout<<"Employee salary\t: ";
}
comic = strtod(comic_string.c_str(), NULL);
multiplePay = comic + multiplePay; // update previous salary with new user input
cout << multiplePay;
cout << "Add other pay?"; // add new salary again?
int y;
cin >> y;
if (y == 1){
cout << multiplePay;
}
else{
break;
}
} // while
cout << multiplePay; //the sum of all salary
使用cin.get()
将解决问题,但第一个用户工资输入将变为0
,并且仅计算下一个输入。请帮帮我。提前谢谢。
答案 0 :(得分:3)
您的问题是cin >> y;
将读取一个int,但将行尾\n
留在输入缓冲区中。下次使用getline
时,它会立即找到此行结束,而不是等待任何更多输入。
答案 1 :(得分:1)
std::basic_ios::eof()
(在ss.eof()
中)无法正常工作。
if (ss >> comic_double)
{
if (ss.eof())
{ // Success so get out
break;
}
}
ss.eof()
只有在调用ss.get()
或其他提取因为您位于文件末尾而失败时才会为真。光标当前是否在结尾并不重要。
请注意,您可以使用ss.get()
:
if (ss >> comic_double)
{
ss.get(); // if we are at the end ss.eof() will be true after this op
if (ss.eof())
{ // Success so get out
break;
}
}