1

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

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。

4

3 回答 3

2

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

你只需要检查scanf的结果

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

  • 如果它是 1 只输入了一个有效的浮点数,它后面没有空格,那么运算符

  • 如果是 2 只有一个有效的浮点数然后一个空格然后输入运算符,在运算符之后没有空格然后一个有效的浮点数

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

于 2018-12-26T09:19:09.927 回答
0

除了缩进和没有在 s 中包装一些东西{ }(尽管它也应该以这种方式工作)之外,您的代码中唯一的问题是您错误地读取了您的数字。

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

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

于 2018-12-26T09:10:32.203 回答
0

为了简单起见,我将浮点数更改为整数类型。

#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;
}
于 2018-12-26T10:16:07.050 回答