c - 全局变量输出不正确

标签 c global-variables

#include <stdio.h>

float aver(float*,int);
float max = 0, min = 0;      // define global variables

int main() 
{
    int i;
    float num[10];  //input  number
    for (i = 0 ; i < 10 ; i++)
        scanf("%f", &num[i]);
    printf("%.2f   %.2f   %.2f   ", max, min, aver(num, i)); //output max ,min and aver
    return 0;
}

float aver(float*num,int n)
{
    max = min = num[0];
    int i;
    float sum=0;
    for (i=0; i<n-1; i++) {
        if (max < num[i])
            max = num[i];        //find max
        else if (min > num[i])
            min = num[i];      //find min
        sum += num[i];
    }
    printf("%.2f   %.2f  \n ",max,min);   //output the max and the min in the array num
    return sum/n;
}
<小时/>

这是我输入并得到的内容。

1 2 3 4 5 6 7 8 9 10
9.00   1.00  
0.00   0.00   4.50   Program ended with exit code: 0

为什么aver函数中的maxmin可以正确输出,而在main函数中他们是0

最佳答案

函数参数的求值顺序未指定。因此,您的代码可能在某些编译器上按预期工作,而在其他编译器上可能会产生意外的结果。

你应该更换

printf("%.2f   %.2f   %.2f   ",max,min,aver(num, i)); //output max ,min and aver

{
  float average = aver(num, i);
  printf("%.2f   %.2f   %.2f   ",max,min, average); //output max ,min and aver
}

明确定义代码行为。

<小时/>

来自 C99 §6.5.2.2p10:

The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.

关于c - 全局变量输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962886/

相关文章:

java - 需要帮助将java程序翻译成C语言

c - 在 C 中从文件读取大数(例如 e 和 pi)到数组

c - 编写 C 库接口(interface)时适合使用哪种 boolean 值类型?

c - WinAPI:选项卡控件、图像和换行符

xcode - 在不公开其类和相关功能的情况下创建一个公共(public)变量?

r - 在 GUI 中使用 R 引用类将值从一个窗口传递到另一个窗口

java - 如何动态地将文件名传递给 Talend 中的 tFTPRename?

c - C 中整数数组的 shell 排序

c - 更新全局结构体的成员

flutter - 在父窗口小部件中访问子窗口小部件的变量(带有Dart的Flutter)