我正在使用运算符+ - * /在C中创建一个简单的计算器。我试着制作一个计算器但是使用do..while
时遇到了一些问题。我认为while (op != 'A', 'Q', 'M', 'D', 'S');
不正确。我在这需要什么?
#include<stdio.h>
int main(void)
{
int x, y, result;
char op;
printf("****************\n");
printf("A-----Add\n");
printf("S-----Substract\n");
printf("M-----MUltiply\n");
printf("D-----Divide\n");
printf("Q-----Quit\n");
printf("****************\n");
printf("Enter the operation:");
scanf("%c", &op);
printf("Enter the two variables:");
scanf("%d %d", &x, &y);
do {
if (op == 'A')
result = x + y;
else if (op == 'S')
result = x - y;
else if (op == 'M')
result = x*y;
else if (op == 'D')
result = x / y;
else if (op == 'Q')
break;
} while (op != 'A', 'Q', 'M', 'D', 'S');
printf("%d %c %d = %d\n", x, op, x, result);
return 0;
}
答案 0 :(得分:1)
!=
是二元运算符,左边是一个值,右边是一个值。只需在右侧列出几个值,就无法一次比较多个值。
要使此代码使用最少的更改,您可以单独将op
与每个变量进行比较,并使用标准逻辑运算符(例如&&
)进行组合。
您还需要考虑代码的逻辑。您正在使用do ... while
循环,这意味着代码将至少运行一次,并且每次到达结束时,如果while
条件为真,它将再次运行。首次运行后会发生什么?如果用户输入(op
)没有指定选项,会发生什么?你有一个'退出'选项,但是当它被使用时会发生什么?
答案 1 :(得分:0)
四个问题:
这:while (op != 'A', 'Q', 'M', 'D', 'S')
没有达到您的预期。您需要将op
分别与每个值进行比较,并在它们之间进行逻辑AND(&&
)。
如果您没有输入正确的字母,则while
循环将是无限循环,因为用户数据的提示位于循环之外而不是内部。将printf
和scanf
调用移至循环内部。
如果输入无效,则用户按下的换行符将作为第一个scanf
的值读入。在每个scanf
模式的开头放一个空格,以吃掉缓冲区中可能存在的任何换行符。
当您打印结果时,您将x
打印为第二个操作数而不是y
。
当您应用上述内容时,您应该拥有:
#include<stdio.h>
int main(void)
{
int x, y, result;
char op;
printf("****************\n");
printf("A-----Add\n");
printf("S-----Substract\n");
printf("M-----MUltiply\n");
printf("D-----Divide\n");
printf("Q-----Quit\n");
printf("****************\n");
do {
// these four lines go inside the loop to prompt again
printf("Enter the operation:");
scanf(" %c", &op); // the space at the start eats the newline
printf("Enter the two variables:");
scanf(" %d %d", &x, &y); // the space at the start eats the newline
if (op == 'A')
result = x + y;
else if (op == 'S')
result = x - y;
else if (op == 'M')
result = x*y;
else if (op == 'D')
result = x / y;
else if (op == 'Q')
break;
// compare op against each value individually
} while (op != 'A' && op != 'Q' && op != 'M' && op != 'D' && op != 'S');
printf("%d %c %d = %d\n", x, op, y, result);
return 0;
}
答案 2 :(得分:-1)
while (op != 'A' && op != 'Q' && op !='M' && op !='D' && op !='S');