プロが教える店舗&オフィスのセキュリティ対策術

if分の場合分けをしたいのですが、どうもやりたいように場合分けが出来ずに困っております。アドバイスをよろしくお願いします。

int main(void){

charA[] = "A.dat";
aaa= fopen(A,"r");
for (i = 0; i < iMESH ; i++) {
for (j = 0; j < jMESH ; j++) {
fscanf(aaa, "%d", &AAA[i][j]);
}
}
fclose(aaa);

for( n = 0 ; n < nMESH ; n++){
for( i = 0 ; i < iMESH ; i++){
for( j = 0 ; j < jMESH ; j++){
/*ここでfprintfなどしてみるとAAA[i][j]が読み込めているのは確かめられています。*/
if(AAA[i][j]==1){
/* 読み込んだAAA[i][j]の中に1はあるのに処理を行いません。なぜでしょうか */
}
}
}
}

}

A 回答 (7件)

配列AAAがint(short)型しか扱わないのであれば、配列の宣言をdouble型からint(short)型に変更するとかした方がいいかも。

    • good
    • 0
この回答へのお礼

ありがとうございます!
無事に読み込んでもらえました!!

ウェブで調べながらとりあえず回れば次へ、、、という進め方をしてきたので基本が疎かなんですね。
非常に助かりました。

ありがとうございます。

お礼日時:2013/05/14 15:49

既にツッコミ入っていますが……。



>char s[5];
>の様に直接添え字の数(5)を書いた場合、この場合は安全に使える添え字は0~4の5つになりますが
>char s[] = "TEST";
>の様に直接添え字の数を書かなかった場合、安全に使える添え字いくつからいくつまでかわかりますか。
>って事だと思いますが。

って事です。
その辺りのメモリ管理についてはプログラマの責任。って言語ですので注意を払った方がいいでしょう。
メモリ管理を失敗しても、書かれた通りに愚直に実行しますよ。

少佐「この容器(10リットルガソリン携行缶・空)にこっちの容器(20リットルガソリン携行缶・満タン)から中身を移して、向こうの部隊へ持って行ってくれ。」
軍曹「(10リットルの容器に20リットル注いだらこぼれるけど…)イエッサー!上官の命令は絶対でアリマス!」
    ………あふれてガソリンまみれ。(バッファオーバーランで破壊)
軍曹「完了したであります!!」
少佐「うむ。ご苦労。 次の作業まで一服したまえ。」
軍曹「ありがとうございます!!」
    …引火して火傷で重症。(破壊の結果が表面化)
少佐「さて、次の作業だが… ん?どうした?しっかり動かんか!」
みたいな。

貴方が用意した
char outputfilename[]= "input.dat";
は、
sprintf(outputfilename,"out-land%03d.dat",n);
で納められる容量がありますか?


で……ソースは削除されたようなので、今この質問(と回答)見ている人には意味不明ですねぇ。
# 後から見た時にナレッジデータベースの役割果たせないから外部に置くのはちょっと……。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございました。
今後その辺りにも配慮しながら書いていこうと思います。

データベースとして貢献しきれないのは申し訳ないと思いつつもアップロードしっぱなしという訳にも行かなかったのでやむを得ずこういう形を取らせて頂きました。

一応型が間違っているとifが上手くいかないってことだけは後から見た人にも伝わるかと思うのでご容赦下さい・・・

繰り返しの質問に対しても親切にありがとうございました。

お礼日時:2013/05/16 14:39

>添字の数ですか・・・


>全く考えておりませんでした。小規模で回せたらどんどん大きくしていこうとしか考えておりませんでしたので

#5でたずねられている

>char s[]="TEST";
>とした時、s[]の添字はいくつまで安全に使えると思いますか?

のは、
char s[5];
の様に直接添え字の数(5)を書いた場合、この場合は安全に使える添え字は0~4の5つになりますが

char s[] = "TEST";
の様に直接添え字の数を書かなかった場合、安全に使える添え字いくつからいくつまでかわかりますか。

って事だと思いますが。
    • good
    • 0
この回答へのお礼

そうだったようですね。
親切にありがとうございます。

お礼日時:2013/05/16 14:40

> fprintf,scanfは自分で調べて使っていたので誤った解釈をしていたかもしれません



書式で指定している形式と変数の型を確認して下さい。
%dで浮動小数点の実数が表示(数字化)出来ますか?

> snprintfを代わりに使いました
> 他になにかおかしなところはあるでしょうか

char s[]="TEST";
とした時、s[]の添字はいくつまで安全に使えると思いますか?
    • good
    • 0
この回答へのお礼

回答有り難うございます。

変数の型ですね。確かに最初に設定したきり余りきにしておりませんでした。
以後気をつけますね。
型が違うとこんなふうにコンパイルはできるけど期待通り動いてくれないということがあるのですね。
人間とは数字の認識の仕方が違うことを改めて感じました。

添字の数ですか・・・
全く考えておりませんでした。小規模で回せたらどんどん大きくしていこうとしか考えておりませんでしたので
64bit 実メモリ4GB のPCでやっているのでhttp://okwave.jp/qa/q4670548.htmlを見る限りだと100億ぐらいに成るのですかね

お礼日時:2013/05/15 00:05

指摘されているscanf()の書式がおかしいのと同じ理由でfprintf()の書式がおかしいところが多数。


まぁ、吹っ飛びはしないです。
期待した動作はしませんが。

この回答への補足

回答ありがとうございます。
fprintf,scanfは自分で調べて使っていたので誤った解釈をしていたかもしれません。
調べなおしても今ひとつ何がおかしいのかわからないのでこちらも具体的に指摘して頂けると幸いです。

補足日時:2013/05/14 15:37
    • good
    • 0

とりあえず, scanf が 1か所おかしい.



あと, sprintf でオーバーランしてる.

この回答への補足

見て頂きありがとうございます。
今までバッファオーバーフローというものを考えたことがなかったのですが
snprintfを代わりに使いました
他になにかおかしなところはあるでしょうか

補足日時:2013/05/14 15:46
    • good
    • 0

とりあえず


・コンパイルできて同じ問題が発生するプログラム
・そのプログラムで問題が発生するデータ
は出せませんか?

この回答への補足

お手数おかけします。
後々削除できるようにアップロード形式にはなりますがこちらです
https://docs.google.com/file/d/0B7R997Q5M1dHTXhk …
よろしくお願い致します

補足日時:2013/05/14 14:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!