#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;
}
コードの間違いを指摘して下さい
コードの間違いを指摘して下さい
AOJの問題 http://judge.u-aizu.ac.jp/onlinejudge/d ... d=ITP1_6_C に関してなのですが、以下のコードでプログラムを実行したのですが、自分の環境では「default.exe は動作を停止しました。」 となってしまいます。コードのどこが間違っているかを教えてください。どうかよろしくお願いします。
Re: コードの間違いを指摘して下さい
はい、a5uaさんの仰る通りだと思われます。
配列の要素数をオーバーして格納してますね…
というか、これは、無限ループに陥っていないでしょうか?(^^;)
①ここでは4回のループを設定していますね。ここは問題ありません。
②問題はここです。本来ならばここで3回繰り返す…という意味だと思うのですが、よく見てください!b<3となってませんか!?
②~④の間で、変数bの値が変動するような命令は見られませんので、この②ループを脱出することはありません。
そして、fの値が無限大に大きくなってしまうのです。
③省略
④ここで配列に代入しているようですが…要素数は[4][3][10]のはずが、fの値が無限大に大きくなっていってしまうので、
f=3になった時点で配列オーバー、実行を停止してしまう、というような感じでしょうか。
ひとまずこれかな?と思ったのでかかせていただきました。
オフトピック
専門用語をあまり覚えていないので、「ここはこれじゃないだろー(この言葉じゃないだろー)」ってことが結構あるかもです…
[追記]いろいろ間違ってたので訂正しましたorz
[追記]いろいろ間違ってたので訂正しましたorz
最後に編集したユーザー amehirune on 2014年8月13日(水) 20:05 [ 編集 2 回目 ]
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
Re: コードの間違いを指摘して下さい
a5ua様
端的な回答ありがとうございました。
amehirune様
詳細な回答ありがとうございました。なぜ「default.exe は動作を停止しました。」 となったのかが分かりました。
端的な回答ありがとうございました。
amehirune様
詳細な回答ありがとうございました。なぜ「default.exe は動作を停止しました。」 となったのかが分かりました。