有人能解释一下为什么while循环不能正常工作吗?
#include <iostream>
using namespace std;
void ask_user(int a, int b){
char choice = ' ';
while(choice != 'q' && choice != 'a' && choice != 's' && choice != 'm'){
cout << "choose operation" << endl;
cout << "a to add, s to subtract, m to multiply and q to quit" << endl;
cout << "----------------------------" << endl;
cin >> choice;
switch(choice){
case 'a' : cout << "a + b = " << a + b;
break;
case 's' : cout << "a - b = " << a + b;
break;
case 'm' : cout << "a * b = " << a + b;
break;
case 'q' : break;
default: cout << "please Enter a valid choice " << endl;
}
}
}
int main(){
ask_user(7, 9);
return 0;
}
如果我输入p作为例子,这是无效的,那么它的工作很好,并要求有效的输入再次,
但是如果我输入pp,它就开始出错,并打印两次消息。
打印三次等。
1条答案
按热度按时间dddzy1tm1#
首先,您对
switch
的工作原理有误解,每个case都必须以break
语句结束,这样下面的语句就不会执行。这意味着
break
将破坏switch
,而不是while
。但主要的问题是你的程序的逻辑是错误的。
您不应该遍历给定输入的有效性,让
switch
语句在default
子句中处理它。相反,您应该循环遍历一个标志,当用户按q键时,该标志将被设置。
因此,考虑到您定义了以下函数,分别用于显示菜单和请求操作对象(定义用于代码可读性):
代码的逻辑可以重写为:
Live example
**注意:**如果希望用户能够在每次迭代时更改操作数的值,只需将
ask_operands(a, b);
调用移到循环内部。