【问题标题】:Simple calculator program in C/C++C/C++ 中的简单计算器程序
【发布时间】:2008-11-07 02:54:17
【问题描述】:

我试图让这个程序给我一个输出,当我做加法、减法、乘法或除法问题时,它会给我答案。但是,它不起作用,任何人都可以帮忙。

int main ()
{  
  int choice;  
  float a, b;  
  float sum;  
  float difference;
  float product;
  float quotiont;

  printf("This program adds, subtracts, multiplies, and divides.\n");  
  printf("**************\n");  
  printf("* Calculator *\n");  
  printf("**************\n");  
  printf("Enter an expression: ");  
  scanf("%f %f", &a, &b);  
  scanf("%f %f %f %f", &sum, &difference, &product, &quotiont);  

  sum = a + b;  
  difference = a - b;  
  product = a * b;  
  quotiont = a / b;  

  if(a + b)  
      printf("Answer = %f\n", &sum);  
  else if(a - b)  
      printf("Answer = %f\n", &difference);  
  else if(a * b)  
      printf("Answer = %f\n", &product);  
  else if(a / b)  
      printf("Answer = %f\n", &quotiont);  
  else  
      printf("Error");  
}

【问题讨论】:

  • 重新标记为非 unix 特定的。有人需要编辑标题(如果可能的话?),因为它也与 Putty 无关......
  • 也与 C++ 无关
  • 编辑了标题,保留了 C++,因为它有效的 C++ 代码...(Mike 可能不知道其中的区别。)

标签: c


【解决方案1】:

你想用这条线完成什么?

scanf("%f %f %f %f", &sum, &difference, &product, &quotiont);  

它的作用是从用户那里获取四个数字并将它们分别加载到四个变量中。在这一行之后,您为这四个变量分配了新值,因此在这行代码中加载它们的值是没有意义的。

另外,以下if 声明的意义何在? (以及所有else if 语句)

if(a + b)
    printf("Answer = %f\n", &sum);

这只会在ab 的总和不为零时打印答案。如果 'if' 后括号内的表达式计算结果为零,则不会执行下面的代码。如果计算结果为非零值,它将执行代码。

上述行的另一个问题是您将指向sum 变量的指针传递给printf() 函数,而不是sum 变量的实际值。 '&sum' 返回变量的内存地址,但 'sum' 返回变量的实际值。所以它应该是这样的:

printf("Answer = %f\n", sum);

我注意到您在程序顶部定义了一个choice 变量,但从未使用过它。由于这一点以及您的else if 语句链,我假设您想让用户选择是加、减、乘还是除。

为此,我将 choice 定义为 char(字符)而不是 int,并让用户键入要分配给 choice 变量的这四个字符之一:'@987654334 @'、'-'、'*'或'/'。

要将choice 定义为字符,请编写以下代码:

char choice;

然后让用户输入这样的选择:

scanf("%c", &choice);

这会从用户那里获取一个字符并将其分配给choice

最后,将您的 if 语句更改为如下内容:

if (choice == '+')
    printf("Answer = %f\n", sum);
else if (choice == '-')
    printf("Answer = %f\n", difference);
else
    printf("Error: invalid choice.\n");

您可能还想为此使用switch 语句。

【讨论】:

  • 您可以为用户提供选项,以便为每个加法、减法、乘法和除法输入 1、2、3、4。
【解决方案2】:

你拼错了 quotient。

实际上,不要将 args 的地址传递给 printf。您只需要对 scanf 执行此操作。做,例如,printf("Answer = %f\n", quotient);

呃,最后的整个 if...else if... 事情只是靠不住。拿出来。

您为什么要扫描计算结果?把它也拿出来。

【讨论】:

    【解决方案3】:
    #include<stdio.h>
    #include<conio.h>
    
    
    int main ()
    {   
        int choice;  
        float a, b;  
        float sum;  
        float difference;
        float product;
        float quotiont;
    
        printf("This program adds, subtracts, multiplies, and divides.\n");  
        printf("**************\n");  
        printf("* Calculator *\n");  
        printf("**************\n");  
        printf("Enter thee value of a: ");  
        scanf("%f",&a);
        printf("Enter the value of y:");
        scanf("%f",&b);
        sum=a+b;
        if (sum = a + b);  
            printf("sum is %f",sum);
    
        difference = a - b;  
        if(difference=a-b)
            printf("\n difference is %f",difference);
    
        product = a * b;  
        if(product=a*b)
            printf("\n product is %f",product);
    
        quotient = a / b;  
        if(quotient=a/b)
        printf("\n quotient is %f",quotient);
    
        return(main());
    }
    

    【讨论】:

    • -1 这段代码充满了错误。平等比较是==,而不是=。您还破坏了计算器逻辑。 ifs 后面不能跟分号,如果您希望它们影响任何东西。为什么地狱你要从main返回调用main的结果没有参数?!!(另外,conio.h是非标准的。)
    • 亲爱的耶稣。在这样的时代,我很遗憾没有“堆栈溢出耻辱堂”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多