鱼C论坛

 找回密码
 立即注册
查看: 1417|回复: 8

[已解决]关于全局变量的问题

[复制链接]
发表于 2021-1-12 15:14:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么top和lowest的值会是0,我调试的时候发现子程序运行完后,top和lowest的值是对的,但是为什么回到主程序就变成0了,是不是全局变量的问题,求大佬解答
#include <stdio.h>

int top,lowest;

int main(void)
{
        double average(int b[]);
        double ave;
        int i,a[10];
        printf("Input 10 students' score:");
        for(i=0;i<10;i++)
        scanf("%d",&a[i]);
        ave=average(a);
        printf("%lf\n %d\n %d\n",ave,top,lowest);
}

double average(int b[])//形参可以不定义数组大小
{
        double ave;
        int i,top=b[0],lowest=b[0];
        for(i=1,ave=b[0];i<10;i++)
        {
                if(top<b[i])
                top=b[i];
                else if(lowest>b[i])
                lowest=b[i];
                ave=ave+b[i];
        }
        ave=ave/10.0;
        
        return ave;//全局变量不用返回
}
最佳答案
2021-1-12 15:48:52
本帖最后由 xieglt 于 2021-1-12 15:50 编辑
#include <stdio.h>

int top,lowest;

int main(void)
{
        double average(int b[]);
        double ave;
        int i,a[10];
        printf("Input 10 students' score:");
        for(i=0;i<10;i++)
        scanf("%d",&a[i]);
        ave=average(a);
        printf("%lf\n %d\n %d\n",ave,top,lowest);
        return 0;
}

double average(int b[])//形参可以不定义数组大小
{
        double ave;
        int i;
        top=b[0],lowest=b[0];
        for(i=1,ave=b[0];i<10;i++)
        {
                if(top<b[i])
                        top=b[i];
                else if(lowest>b[i])
                        lowest=b[i];
                ave=ave+b[i];
        }
        ave=ave/10.0;
        
        return ave;//全局变量不用返回
}

未命名.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-12 15:25:21 | 显示全部楼层
看错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 15:27:24 | 显示全部楼层
int i,top=b[0],lowest=b[0];

改成
int i;
top=b[0],lowest=b[0];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-12 15:41:42 | 显示全部楼层

一样的,还是错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 15:48:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xieglt 于 2021-1-12 15:50 编辑
#include <stdio.h>

int top,lowest;

int main(void)
{
        double average(int b[]);
        double ave;
        int i,a[10];
        printf("Input 10 students' score:");
        for(i=0;i<10;i++)
        scanf("%d",&a[i]);
        ave=average(a);
        printf("%lf\n %d\n %d\n",ave,top,lowest);
        return 0;
}

double average(int b[])//形参可以不定义数组大小
{
        double ave;
        int i;
        top=b[0],lowest=b[0];
        for(i=1,ave=b[0];i<10;i++)
        {
                if(top<b[i])
                        top=b[i];
                else if(lowest>b[i])
                        lowest=b[i];
                ave=ave+b[i];
        }
        ave=ave/10.0;
        
        return ave;//全局变量不用返回
}

未命名.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 15:54:12 | 显示全部楼层
MeowMoo 发表于 2021-1-12 15:41
一样的,还是错的

按楼上那样改就行了啊,不应该错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-12 16:02:12 | 显示全部楼层

哦~,原来是全局变量重定义了,谢谢,但是这个问题调试的时候子函数能正常运行,而且结果也正确,意思是如果在子函数重定义,相当于这两个变量在子函数的值只在子函数有效,回主函数就会被重新赋值了,是这个意思吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-12 16:05:12 | 显示全部楼层
心驰神往 发表于 2021-1-12 15:54
按楼上那样改就行了啊,不应该错啊

是的,没错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-12 23:16:46 | 显示全部楼层
上面已经有正确答案,我回个帖子而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 03:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表