1

有以下代码。

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。但它不会正确移动,只有第一个“数据”是正确的,没有其他内容被移动。

4

3 回答 3

3

替换这个

for (d==29;d>0;d--)

for (d=29;d>0;d--)
于 2013-01-27T15:39:14.360 回答
1

你有几个问题。

  1. 您应该=for循环设置中使用,而不是==.

  2. 循环不应该从 开始30,不是29吗?

  3. 我认为您正在向后使用赋值运算符。如果您想复制raindays[29]raindays[28],然后将该值传播到raindays[27]等,您需要使用:

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

    不是反过来。

  4. raindays[29]开始复制循环之前,您没有放入任何东西。这意味着您将只是复制随机数据,即使您确实进行了上述两个修复。

替代答案:

  1. 你还是应该用=,不是==

  2. 循环仍然从错误的位置开始。

  3. 如果您尝试复制up,则您的赋值语句是正确的,但是:

  4. 在开始复制之前,您仍然需要在数组中放入一些东西。由于您没有显示 的​​定义raindays,因此很难说这是否重要。

于 2013-01-27T15:45:21.607 回答
0

尝试这个:

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=30;d>0;d--)
{
    raindays[d-1]=raindays[d];

 }
   raindays[0]=0;


    //  d--;


     raindays[30]=today_rain;
    today_rain=0;

     } 
于 2013-01-27T15:47:27.490 回答