【问题标题】:Function not returning result in c (in a project file)函数未在 c 中返回结果(在项目文件中)
【发布时间】:2017-03-29 12:52:30
【问题描述】:

当我在 .c 文件中运行此代码时,它可以工作,但是当我为它创建项目时,我调用的函数只会返回 0.00。为什么?为什么它在项目文件中不起作用?

我正在使用 DevC++。

#include<stdio.h>

float mean(int total, int max);

int main(){
    int i,max, total=0;
    int array[max];
    printf("Enter max: ");
    scanf("%d",&max);

    for(i=0; i<max; i++){
        scanf("%d",&array[i]);
        total+=array[i];
    }
    printf("Total: %d\n",total);
    printf("Mean: %.2f",mean(total,max));
    return 0;
}

float mean(int total, int max){
    float ave;
    ave=(float)total/max;

    return ave;
}

【问题讨论】:

  • 你展示的代码甚至不应该build。请复制粘贴您拥有的实际代码。如果是这样,那么您需要先修复构建错误。
  • 然后考虑一下:max 的值是什么调用scanf 对其进行初始化之前? array 的大小是多少?
  • 最大值和数组没有问题。我的问题是当我调用 mean(total,max);输出应该是 ave,但它只显示 0.00,这就是为什么
  • 哦,所以你喜欢生活在边缘并且有未定义的行为?因为那是你所拥有的!当您使用max 定义数组array 时,max 的值是indeterminate,您将有未定义的行为。在您的程序中存在未定义的行为意味着整个程序格式错误并且无效。该程序所做的任何事情都不能被信任。
  • @DavidBowling: "...声明 int array[0]." 不一定。 max 还没有被赋值,所以使用 max 已经调用了臭名昭著的未定义行为。

标签: c dev-c++


【解决方案1】:

问题在于这两行代码——在实际计算出max 的值之前,您将array 的大小声明为max,这将导致无法解释的行为。您的代码很可能完全按照预期工作。

int array[max];
...
scanf("%d",&max);

做你想做的事情的方法是分配足够大的内存来保存你的数组。您可能还想检查 max 是否也大于 0,并且 scanf 找到了一个数字。但它的大致要点是这样的:

int max;
int *array;
printf("Enter max: ");
scanf("%d",&max);
array=malloc(sizeof(int)*max);

/* your code goes here */

free(array);

【讨论】:

  • 最大值和数组没有问题。我的问题是当我调用 mean(total,max);输出应该是 ave,但它只显示 0.00,这就是为什么
  • @PatrickEsguerra - maxarray 都错了。当经验丰富的程序员告诉新手他们犯了一个重大错误时,新手最好不要直接否认他们的说法。
  • @PatrickEsguerra:这是因为按照这个答案的解释调用了未定义的行为。
  • @PatrickEsguerra 仅仅因为您在一个地方看到了问题,并不意味着问题不是由其他地方的代码引起的。在这个特定的例子中,max 在您定义 array 时可能开始为 0。然后你写信到array 你超出了它的界限,这会破坏你的程序的内存,导致随机错误。
  • 我试过运行它,最大值是数组的大小没有错
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 2012-12-27
相关资源
最近更新 更多