所以我正在制作一个带有主菜单的计算器,我想让操作继续,直到用户按下$然后返回主菜单。当我测试它时,它会将我的代码抛入无限循环中。我做错了什么?下面是一个功能的片段。 (菜单被声明为无效)
float makeSum(float num1, float num2) {
float r = 0;
bool ended = false;
do {
cout << "Please provide the first number: " << endl;
cin >> num1;
if (num1 == '$') {
ended = true;
}
cout << "Please provide the second number: " << endl;
cin >> num2;
if (num2 == '$') {
ended = true;
r = num1 + num2;
cout << "Result: " << r << endl;
} while (!ended);
menu();
return r;
}
答案 0 :(得分:5)
这肯定无法奏效。当你说:
float num2;
然后再说:
cin >> num2;
然后只从输入流中读取浮点数。解决这个问题的一种方法是在你的循环中:
string input;
...
cin >> input;
if (input == "$") break;
istringstream s(input);
float num;
s >> num; // now you read a float from the string
另一件事是,使用break
突破循环更容易,就像我在上面的代码片段中所示,而不是使用布尔标志并检查它。