将switch语句包装在if语句C中?

时间:2018-12-26 08:55:00

标签: c

所以我希望我的程序在2个值之间进行算术运算:

1。首先,我希望程序检查输入的2个值是否为数字
2.如果是正确的话,我不希望运行switch语句,该语句取决于操作员进行计算
3.如果输入的运算符不是有效的(*,+,-,/),那么我不会返回错误,表示运算符无效
4.如果值不是数字,我将不会显示输入的值无效

例如,如果我输入K * 2,我希望程序说“错误无效值”
如果输入20? 2程序应返回“错误有效的运算符”

我尝试使用{}和()来包装switch函数,但是似乎没有任何作用

#include <stdio.h>

int main (void)
{
 float value1, value2;
 char Operator;

 printf("Enter your two values expression (x (+, -, *, /) y): ");
 scanf("%f %c %f", &value1, &Operator, &value2);


if( (value1>=0 && value1<=9) || (value2>=0 && value2<=9) )

switch(Operator)
{
    case '+':

        printf("The result is: %.2f \n", value1+value2);

    break;

    case '-':

        printf("The result is: %.2f \n", value1-value2);

        break;

    case '*':
    case 'x':
    case 'X':

        printf("The result of this multiplication is: %.2f \n", 
 value1*value2);

    break;

    case '/':

        if(value1==0 || value2==0)
        printf("Error 1 you can't divide by 0 \n");
        else
        printf("The result of this division is: %.2f \n", value1/value2);
    break;

    default:
        printf("Error please enter a valid operator \n");
        break;

}

else printf("Error please enter a valid value \n");



}

当我输入无效值时,程序将返回“错误,请输入有效的运算符”,而不是else语句“错误,请输入有效值”

如果第一个值正确但第二个值不正确,则说: 10 * c 而不是返回“错误,请输入有效值”,而是返回0。

3 个答案:

答案 0 :(得分:2)

正如您输入20 ? 2时所说的那样,因为您拥有if( (value1>=0 && value1<=9) || (value2>=0 && value2<=9) ),该错误将涉及值而不是运算符。值的此测试必须删除。

您只需要检查 scanf

的结果
  • 如果为0,则第一个输入的值不是有效的浮点数

  • 如果为1,则仅输入了有效的浮点数,后面没有空格,然后是运算符

  • 如果只有2个有效浮点数,则输入一个空格,然后输入该运算符;在该操作符没有空格后,则输入一个有效浮点数

  • 如果值为3,则您知道value1和value2是有效值并输入了运算符,则可以切换到测试运算符并计算结果

答案 1 :(得分:0)

除了缩进和不将某些内容包装在{ }内之外,代码中的唯一问题(尽管它也应以这种方式工作)是因为您输入的数字不正确。

  1. if( (value1>=0 && value1<=9) || (value2>=0 && value2<=9) )中,您仅检查0到9之间的值。如果输入10,它将无法工作。我看到您正在尝试检查字符,例如'0'或'9',但是您需要另一个函数来处理刚刚读入的内容。
    编辑:起初我没有注意到,但是您的if拥有||而不是&&。现在,即使只有一个数字有效,测试也会通过。
  2. 您以scanf("%f", ...)读入。假设我在此处输入K。计算机将尝试像处理浮点数一样对其进行处理。

我建议使用fgets,然后使用另一个函数(逐个字符)处理它,以建立数字。 如果有人知道更好的方法,请随时发表评论。 我希望这会有所帮助。

答案 2 :(得分:0)

为简单起见,我将float更改为整数类型。

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int value1, value2;
char Operator;

printf("Enter your two values expression (x (+, -, *, /) y): ");
if (scanf("%d %c %d", &value1, &Operator, &value2) != 3)
{
  printf("Either of value1 or value2 is not a number. Enter valid input\n");
  return EXIT_FAILURE;
}
switch(Operator)
{
    case '+':
        printf("The result is: %d \n", value1+value2);
        break;

    case '-':
        printf("The result is: %d \n", value1-value2);
        break;

    case '*':
    case 'x':
    case 'X':
        printf("The result of this multiplication is: %d \n", value1*value2);

    break;

    case '/':

        if(value2==0)
        {
        printf("you can't divide by 0, Hence value2 must be an non zero integer\n");
        }
        else
            printf("The result of this division is: %d \n", value1/value2);
        break;

    default:
        printf("Error please enter a valid operator \n");
        break;

}
return;
}