| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3647 人关注过本帖
标题:调试过程监视到全局变量的值是正确的,输出的时候却都是0,麻烦帮忙看看。
只看楼主 加入收藏
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:21 
调试过程监视到全局变量的值是正确的,输出的时候却都是0,麻烦帮忙看看。
昨天晚上看了一晚上自己的代码,没看出来问题在哪。
今天早上起床又看了一遍,反复调试,在调试过程中max和min在监视器里面的最终值是98和43.
主函数输出到屏幕后却都是0。
代码如下:

#include <stdio.h>
double average,max,min;
double result(double x[]);
double result(double x[])
{
    int i;
    for(i=0,average=0.0;i<10;i++)
    {
        average+=x[i];
    };
    average/=i;
    max=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]>max)
        {
            max = x[i];
        };
    };
    min=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]<min)
        {
            min = x[i];
        }
    };
    return average;
}
int main()
{
    double array[10]={98,77,43,95,83,94,88,81,73,88.5};
    printf("the average is:%lf\nthe max is:%lf\nthe min is:%lf\n",result(array),max,min);
}

烦请各位大神给点指导,问题在哪。
搜索更多相关主题的帖子: average include double result 
2016-03-30 13:51
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:2 
问题比较多,有的地方多分号,全局变量直接使用,不用return。你还是多多学习基础的东西。
程序代码:
#include <stdio.h>

double average,max,min;

void result(double x[])
{
    int i;
    for(i=0,average=0.0;i<10;i++)
    {
        average+=x[i];
    }
    average/=i;
    
    max=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]>max)
        {
            max = x[i];
        }
    }
    
    min=x[0];
    for(i=0;i<10;i++)
    {
        if(x[i]<min)
        {
            min = x[i];
        }
    }
}

int main()
{
    double array[10]={98,77,43,95,83,94,88,81,73,88.5};
    result(array);
    
    printf("the average is:%lf\nthe max is:%lf\nthe min is:%lf\n",average,max,min);    
    return 0;
}

   唯实惟新 至诚致志
2016-03-30 14:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
表面看代碼沒問題,要看看執行畫面。先把main()中輸出的部分,拆開兩行寫,先輸出平均値,下一行再輸出max、min,看看怎樣。double在printf()中是不需要%lf的,%f即可。初步猜測是你使用tc之類的東西吧。

你的這個寫法有很多地方是冗餘的。

[此贴子已经被作者于2016-3-30 14:04编辑过]


授人以渔,不授人以鱼。
2016-03-30 14:03
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
以下是引用lzh253739255在2016-3-30 13:51:34的发言:
    printf("the average is:%lf\nthe max is:%lf\nthe min is:%lf\n",result(array),max,min);


问题再这里   这个入栈时 max min 就是0  result函数执行完毕后 max min 才发生改变 但此时已经和printf没有关系了

DO IT YOURSELF !
2016-03-30 14:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
函數定義在前面,就不需要函數原型了。

授人以渔,不授人以鱼。
2016-03-30 14:04
小白小白一只
Rank: 2
来 自:吉林大学
等 级:论坛游民
帖 子:16
专家分:41
注 册:2016-3-30
收藏
得分:2 
全局变量直接用,如果有返回值的话就只返回了average 吧,是这样吧?
2016-03-30 14:10
丰峰风疯
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:15
注 册:2016-3-6
收藏
得分:2 
你把max和min的输出放到另外一个printf就可以了,或者把printf里面average的输出放在最后面。
原因我说不清楚,我的猜测是printf在处理他的va_list的时候,是从右往左处理的,所以先min,再max,最后才是result。而在result之前,max和min因为是全局变量没有初始化,在bss段,所以是0.
2016-03-30 14:14
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
收藏
得分:0 
回复 7楼 丰峰风疯
这个解释有点复杂,不过看了半天也找到点感觉了。
综合了前面其他人的回答。
谢谢!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:25
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
收藏
得分:0 
回复 3楼 TonyDeng
谢谢偶像回答。
工作太忙,我都是抽空业余学习学习。
现在基础都称不上,刚学到全局变量和局部变量的区别。
编写能力也不是很成熟,见谅见谅!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:27
lzh253739255
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2013-10-8
收藏
得分:0 
回复 4楼 wp231957
谢谢回答!

程序员应该足够懒,追求一劳永逸,写出来的代码,应是可以反复使用的.
2016-03-30 14:28
快速回复:调试过程监视到全局变量的值是正确的,输出的时候却都是0,麻烦帮忙看 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034970 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved