有以下代码。

unsigned char raindays[31];
void midnat(void)   //thing to do at midnight. shift of date.
{
    int d;
    week_day++;
    if (week_day==7) week_day=0;
        r_regn=r_regn+today_rain;


    for (d==29;d>0;d--)
    {
        raindays[d]=raindays[d-1];
    }

    raindays[0]=0;


//  d--;


    raindays[30]=today_rain;
    today_rain=0;

}

但是“数据”是不正确的。
我希望“raindays[29]中的数据取raindays[28]中的值
降到0。
但它不会正确移动,只有第一个“数据”是正确的,其他的都不会移动。

最佳答案

你有几个问题。
您应该在=循环设置中使用for,而不是==
循环不应该从30开始,而不是从29开始吗?
我想你是在反向使用赋值运算符。如果要将raindays[29]复制到raindays[28],然后将该值传播到raindays[27],则需要使用:

raindays[d - 1] = raindays[d];

不是相反。
在开始复制循环之前,您不会在raindays[29]中放入任何内容。这意味着你只需要复制随机数据,即使你做了以上两个修正。
备选答案:
您仍然应该使用=,而不是==
循环仍然从错误的地方开始。
如果你试图复制,你的作业陈述是正确的,但是:
在开始复制之前,仍然需要在数组中放入一些内容。因为您还没有显示raindays的定义,所以很难说这是否重要。

关于c - 存储阵列问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14548960/

10-11 16:44