コードの間違いを指摘して下さい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mkt

コードの間違いを指摘して下さい

#1

投稿記事 by mkt » 9年前

AOJの問題 http://judge.u-aizu.ac.jp/onlinejudge/d ... d=ITP1_6_C に関してなのですが、以下のコードでプログラムを実行したのですが、自分の環境では「default.exe は動作を停止しました。」 となってしまいます。コードのどこが間違っているかを教えてください。どうかよろしくお願いします。

コード:

#include <stdio.h>
 
int main(void){
    int room[4][3][10];
    int b,f,r,v;
    int N,i;
    for(b=0;b<4;b++){
        for(f=0;b<3;f++){
            for(r=0;r<10;r++){
                room[b][f][r]=0;
            }
        }
    }
    scanf("%d",&N);
    for(i=0;i<N;i++){
        scanf("%d %d %d %d",&b,&f,&r,&v);
        room[b-1][f-1][r-1]+=v;
    }
    for(b=0;b<4;b++){
        for(f=0;f<3;f++){
            for(r=0;r<10;r++){
                printf(" %d",room[b][f][r]);
            }
        printf("\n");
        }
    if(b<3)
        printf("####################");
    }
    return 0;
}
        

アバター
a5ua
記事: 199
登録日時: 13年前

Re: コードの間違いを指摘して下さい

#2

投稿記事 by a5ua » 9年前

8行目:fに関するfor文に、bが使われています。
for(f=0;b<3;f++){

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: コードの間違いを指摘して下さい

#3

投稿記事 by amehirune » 9年前

mkt さんが書きました:

コード:

#include <stdio.h>

    int room[4][3][10];
    int b,f,r,v;
    int N,i;
    for(b=0;b<4;b++){           //①
        for(f=0;b<3;f++){         //②
            for(r=0;r<10;r++){    //③
                room[b][f][r]=0;  //④
            }
        }
    }

 
はい、a5uaさんの仰る通りだと思われます。
配列の要素数をオーバーして格納してますね…
というか、これは、無限ループに陥っていないでしょうか?(^^;)

①ここでは4回のループを設定していますね。ここは問題ありません。
②問題はここです。本来ならばここで3回繰り返す…という意味だと思うのですが、よく見てください!b<3となってませんか!?
 ②~④の間で、変数bの値が変動するような命令は見られませんので、この②ループを脱出することはありません。
 そして、fの値が無限大に大きくなってしまうのです。
③省略
④ここで配列に代入しているようですが…要素数は[4][3][10]のはずが、fの値が無限大に大きくなっていってしまうので、
 f=3になった時点で配列オーバー、実行を停止してしまう、というような感じでしょうか。

ひとまずこれかな?と思ったのでかかせていただきました。
オフトピック
専門用語をあまり覚えていないので、「ここはこれじゃないだろー(この言葉じゃないだろー)」ってことが結構あるかもです…
[追記]いろいろ間違ってたので訂正しましたorz
最後に編集したユーザー amehirune on 2014年8月13日(水) 20:05 [ 編集 2 回目 ]
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

mkt

Re: コードの間違いを指摘して下さい

#4

投稿記事 by mkt » 9年前

a5ua様
端的な回答ありがとうございました。

amehirune様
詳細な回答ありがとうございました。なぜ「default.exe は動作を停止しました。」 となったのかが分かりました。

閉鎖

“C言語何でも質問掲示板” へ戻る