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]つまり、上記の2つの修正を行ったとしても、ランダムなデータをコピーするだけです。

別の答え:

  1. =ではなく、を使用する必要があり==ます。

  2. ループはまだ間違った場所から始まります。

  3. コピーしようとしている場合、割り当てステートメントは正しいですが、次のようになります。

  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 に答える