尝试在C中编写一个简单的计算器。如果没有输入字母“A”,“B”,“C”或“D”,我就会停止程序终止,否则继续。即使我输入一个有效的字符,它也永远不会进行。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letter;
float num1,num2;
printf("What operation would you like to perform?\n\tA) Addition\n\tB) Subtraction\n\tC) Multiplication\n\tD) Division\n\n");
scanf("%c", &letter);
if (letter != 'A' || letter != 'B' || letter != 'C' || letter != 'D')
printf("Not a valid operation\n");
return 1;
printf("Please enter first number: ");
scanf("%f", &num1);
printf("Please enter second number: ");
scanf("%f", &num2);
if (letter == 'A' || letter == 'a')
printf("The sum of %f and %f, is %f\n", num1, num2, num1 + num2);
else if (letter == 'B' || letter == 'b')
printf("The difference of %f and %f, is %f\n", num1, num2, num1 - num2);
else if (letter == 'C' || letter == 'c')
printf("The product of %f and %f, is %f\n", num1, num2, num1 * num2);
else if (letter == 'D' || letter == 'd')
printf("The quoation of %f and %f, is %f\n", num1, num2, num1 / num2);
else
printf("The operation was not valid");
return 0;
}
感谢您的帮助。
答案 0 :(得分:3)
if (letter != 'A' || letter != 'B' || letter != 'C' || letter != 'D')
printf("Not a valid operation\n");
return 1;
这部分是问题所在。虽然return 1;
是缩进的,但它会执行,因为它不是if
块的一部分。另外,你使用了错误的运算符,你的条件语句读取“如果字母不是A或字母不是B ......”这总是正确的,因为字母不能同时为{{1和A
同时。您需要包含两个语句并使用B
运算符,如下所示:
&&
在C中,缩进对编译器来说毫无意义。如果您需要根据条件执行多个语句,则必须使用if (letter != 'A' && letter != 'B' && letter != 'C' && letter != 'D')
{
printf("Not a valid operation\n");
return 1;
}
和{
将它们包装到复合语句中。
答案 1 :(得分:0)
你检查
if (letter != 'A' || letter != 'B' ...)
好的 - 如果字母是'B',那么它不是A,程序停止在那里测试并输出你的失败条件并返回。
另一方面,如果字母是“A”,则它不会是“B”,因此它会在第二次测试时失败,并在那里失败。
你想要什么:
if (letter != 'A' && letter != 'B' && letter != 'C' && letter != 'D')
或者,您可以使用C函数“strchr”来搜索字符串中的字符。
if (!strchr("ABCDabcd", letter)) // returns NULL, which is false, if no match
{
printf("Invalid operation");
return 1;
}
答案 2 :(得分:0)
尝试:
if (letter != 'A' && letter != 'B' && letter != 'C' && letter != 'D')
...