注册 登录
编程论坛 C++教室

为什么数组b的值在调用函数后全变0了

zhengchen080 发布于 2013-08-13 13:30, 948 次点击
#include<stdio.h>
int b[12];
int rn(int a,int y,int r)
{
    int i,d;
    if((a%4==0&&a%100!=0)||(a%100==0&&a%400==0))
    {
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        for(i=0,d=0;i<y-1;i++)
        {
            d=d+b[i];
        }
        d=d+r;
    }
    else
    {
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        for(i=0,d=0;i<y-1;i++)
        {
            d=d+b[i];
        }
        d=d+r;
    }
    return(d);
}
main()
{
    int n,y,r,i;
    scanf("%d,%d,%d",&n,&y,&r);
    for(i=0;i<11;i++)
        printf("%d ",b[i]);
    printf("\n%d年的第%d天",n,rn(n,y,r));
}
只有本站会员才能查看附件,请 登录


[ 本帖最后由 zhengchen080 于 2013-8-13 13:38 编辑 ]
13 回复
#2
zhengchen0802013-08-13 13:40
为什么没人
#3
yuccn2013-08-13 14:04
#include<stdio.h>
int b[12];
全局遍历,默认初始化0吧,你都没有对他进行修改,当然是0 了
#4
zhengchen0802013-08-13 15:09
回复 3楼 yuccn
怎么修改求指教
#5
h133528258612013-08-13 15:39
这样就可以了:
#include<stdio.h>
int b[12];
int rn(int a,int y,int r)
{
    int i,d;
    if((a%4==0&&a%100!=0)||(a%100==0&&a%400==0))
    {
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        for(i=0;i<11;i++)
        {printf("%d ",b[i]);}
        for(i=0,d=0;i<y-1;i++)
        {
            d=d+b[i];
        }
        d=d+r;
    }
    else
    {
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        for(i=0;i<11;i++)
        {printf("%d ",b[i]);}
        for(i=0,d=0;i<y-1;i++)
        {
            d=d+b[i];
        }
        d=d+r;
    }   
   
    return(d);
}
main()
{
    int i,n,y,r;
    scanf("%d,%d,%d",&n,&y,&r);
    printf("\n%d年的第%d天\n",n,rn(n,y,r));
}
#6
zhengchen0802013-08-13 16:11
回复 5楼 h13352825861
我的目的不是要打印b数组的值,而是想在调用函数之后b的数组的值能随之改变
#7
wp2319572013-08-13 16:17
这是我以前写的一个函数  返回一年中某一日的天数
程序代码:
int year_sumday(int year,int month,int day)
{
    int sum=0;
    int rui[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int ruiflag=0;
    if((year%4==0 &&year%100!=0) || year%400==0) ruiflag=1;
    for(int index=0;index<month-1;index++)
    {
        if(ruiflag==1) sum+=rui[index];else sum+=ping[index];
    }
    sum+=day;
    return sum;
}


#8
wp2319572013-08-13 16:18
你用2个  int b[12] 的初始化方式 也太奇葩了
#9
zhengchen0802013-08-13 16:54
回复 8楼 wp231957
我运行了下 不行啊
#10
wp2319572013-08-13 16:57
以下是引用zhengchen080在2013-8-13 16:54:11的发言:

我运行了下 不行啊
不行是啥东东  你是咋用的
#11
zhengchen0802013-08-13 19:04
回复 10楼 wp231957
我的意思是调用函数后b数组的值随之改变,因为b定义的是全局变量,那为什么在我调用函数之后b数组的值还是0呢
#12
whxnsw2013-08-13 21:39
调用函数中的b[i]对main函数中的b[i]没有影响,b[i]没有进行调用,一般int b[12]应在main函数中定义的.
#include "stdio.h"
#include "math.h"
int b[12];
main()
{

    int n,y,r,i;
    scanf("%d,%d,%d",&n,&y,&r);
    for(i=0;i<11;i++)
        printf("%d ",b[i]);

}
结果输出一样为0,若在main函数中定义int b[12],则产生随机数组,在main 函数外定义,初始化为0,不知为何,请高手详解
#13
小小小火柴2013-08-16 09:47
回复 12楼 whxnsw
晕了!你上面的没有定义数值,你说b[12]会不会默认为0呢?另外,你的函数,你在main()函数中没有去调用你写的函数,它怎么会改变数值呢?
#14
zhujiangtaoc2013-08-18 21:12
你在rn函数中定义的b[]作用域只在那个函数中,又因为你声明了全局变量b[],所以你打印全是0,不信你可以把全局的b[]={1,2,3,4,5,6,7,8,9,0,11,3};那么for(i=0;i<11;i++)
        printf("%d ",b[i]);就会打印出1,2,3,4,5,6,7,8,9,0,11,3;
1