C中if / else语句的问题

时间:2013-09-14 01:31:56

标签: c if-statement

尝试在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;

}

感谢您的帮助。

3 个答案:

答案 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')
...