【问题标题】:why do i get 0 instead the result of calculation x - y and x/y in C为什么我得到 0 而不是 C 中计算 x - y 和 x/y 的结果
【发布时间】:2019-05-08 16:34:39
【问题描述】:

在这段代码中,我以为我会得到 x / y 和 x - y 的计算结果,但程序显示 i 和 j 的值为 0。怎么了?

#include <stdio.h>

float calculate(float, float);
float i, j;

int main()
{
    float a, b;

    printf("Enter two numbers:\n");
    scanf("%f%f", &a, &b);
    printf("\nThe results are: %f  %f  %f\n", calculate(a, b), i, j);

    return 0;
}

float calculate(float x, float y)
{
    float r;

    r = x * y;
    i = x / y;
    j = x - y;
    return r;
}

【问题讨论】:

    标签: c global-variables


    【解决方案1】:

    这是未定义的行为,当您在同一个 printf 中调用 calculate() 函数时,i 以及 j 在该 printf(同一个函数)中计算。顺便说一句,使用全局变量 ( i, j ) 不是一个好主意...仅出于测试目的,您可以在 i 和 j 的下一个 printf 之前计算()。

    您可以使用以下方法测试该行为:

    #include <stdio.h>
    
    float calculate(float, float);
    float i, j;
    int main()
    {
        float a, b;
    
        printf("Enter two numbers:\n");
        scanf("%f%f", &a, &b);
        printf("\nThe results are: %f", calculate(a, b));
        printf("    %f    %f\n", i, j);
    
        return 0;
    }
    
    float calculate(float x, float y)
    {
        float r;
    
        r = x * y;
        i = x / y;
        j = x - y;
        return r;
    }
    

    【讨论】:

      【解决方案2】:

      可能与printf函数中参数的解析、引用、执行顺序有关。 printf 函数使用从右到左方向的参数。您可以通过以下代码轻松查看订单。

      #include <stdio.h>
      
      float calculate(float, float);
      float i, j;
      
      int main()
      {
          float a, b;
      
          printf("Enter two numbers:\n");
          scanf("%f%f", &a, &b);
          //printf("\nThe results are: %f  %f  %f\n", calculate(a, b), i, j);
          printf("\nThe results are: %f  %f  %f\n", i, j, calculate(a, b));
      
          return 0;
      }
      
      float calculate(float x, float y)
      {
          float r;
      
          r = x * y;
          i = x / y;
          j = x - y;
          return r;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 2013-08-17
        • 1970-01-01
        相关资源
        最近更新 更多