- 締切済み
続・C言語について
http://okwave.jp/qa5241461.html 先ほど、このような質問をして、いただいた回答を参考に下記のようなプログラムを作ってみたのですが、実行結果は、数値の入力と最後の"\n"しか反映していません…。 このプログラムのどの部分がマズイのか、お教えいただけたら幸いです。 よろしくお願いいたします。 #include <stdio.h> void draw_even(int, int); void draw_odd(int, int); int main(void) { int kazu; int gyou=1; printf("数字2~9を入力してください:"); scanf("%d", &kazu); while(kazu < 2 || kazu >9) { printf("※入力エラー!! 2~9を入力してください:"); scanf("%d", &kazu); } while(gyou <= kazu) { if(kazu = 2*(kazu/2)) { gyou = kazu+1; draw_even(kazu, gyou); } else { gyou = kazu; draw_odd(kazu, gyou); } gyou++; } } void draw_even(int kazu, int gyou) { int keta = 1; if(kazu!=(gyou+1)/2) { while(keta==kazu && keta==(gyou+1)/2 && keta==gyou-(kazu-1)) { printf("*"); } } else { for(keta=1; keta<=gyou; keta++) { if(keta!=(gyou+1)/2) { printf("*"); } else { printf(" "); } } } printf("\n"); } void draw_odd(int kazu, int gyou) { int keta = 1; if(kazu!=(gyou+1)/2) { while(keta==kazu && keta==(gyou+1)/2 && keta==gyou-(kazu-1)) { printf("*"); } } else { for(keta=1; keta<=gyou; keta++) { printf("*"); } } printf("\n"); }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
前の質問のお礼でお呼びでしたのでちょっと見に来ましたが、あまりにもメチャクチャなのでちょっとコメントのしようがないです。自分で何をやりたいのか1行1行考えて書いていますか? 雰囲気で書いてもプログラムは動きません。1行・1文字に全て意味があります。日本語のように多少言い間違えてもコンピュータの方が気を利かせて理解してくれるということはありません。順番を1つ間違えてもだめです。 まずは、元の例題プログラムが1行1行何をしているのか、全て理解できていますか? それがわかっていないうちに改造に手をつけても無理だと思います。まずは例題プログラムを徹底的に分析してみてください。
- asuncion
- ベストアンサー率33% (2127/6289)
#2は他のかたと重複しました。 無視してくださってかまいません。
- asuncion
- ベストアンサー率33% (2127/6289)
>if(kazu = 2*(kazu/2)) これは、何をするためのif文ですか?
補足
kazu==2*kazu/2を満たせばkazuは『偶数』で、満たさなければ『奇数』を判別するモノ(のつもり)です。 お手数ですが、前回の質問を見ていただけるとわかるのですが、偶数の場合と奇数の場合とで処理が変わるので、このようなif文を入れてあります。 intで宣言した数が奇数だった場合、2で割ると小数点以下が切り捨てになり、5/2=2となる為、これで偶数・奇数が判別できると思ったのですが、間違いでしょうか…?
斜め読みで申し訳ないが if(kazu = 2*(kazu/2)) ってシングルイコールだけど大丈夫?
お礼
あッ!!こりゃあいけないですね! ありがとうございます! つでに、自分で発見したミスなんですが、関数のwhile文の中の「keta==(gyou+1)/2」の部分は「keta<=(gyou+1)/2」の間違いでした。 上記の2つを直しても、実行結果は変わりませんでした…。
補足
下記のお礼の「ミスを見つけた」の部分がまたミスです…。 アホですね…自分。 もとのままでOKでした。。。
お礼
#include <stdio.h> void draw_u (int); void draw_odd (int); void draw_even (int); void draw_d (int); void SPACEx (int); void SPACEy (int); void main (void) { int suu; printf("数字2~9を入力してください:"); scanf("%d", &suu); while(suu < 2 || suu > 9) { printf("※入力エラー!! 2~9を入力してください:"); scanf("%d", &suu); } if(suu == 2*(suu/2)) { suu = suu+1; draw_u (suu); draw_even (suu); draw_d (suu); } else { draw_u (suu); draw_odd (suu); draw_d (suu); } } void draw_u (int suu) { int a, b, cnt; a=0; b=(suu-3)/2; cnt=1; while(cnt<=(suu-1)/2) { SPACEx (a); SPACEy (b); SPACEy (b); a++; b--; cnt++; printf("\n"); } } void draw_odd (int suu) { int kazu; for(kazu=1; kazu<=suu; kazu++) { printf("*"); } printf("\n"); } void draw_even (int suu) { int kazu; for(kazu=1; kazu<=suu; kazu++) { if(kazu != (suu+1)/2) { printf("*"); } else { printf(" "); } } printf("\n"); } void draw_d (int suu) { int a, b,cnt; a=(suu-3)/2; b=0; cnt=1; while(cnt<=(suu-1)/2) { SPACEx (a); SPACEy (b); SPACEy (b); a--; b++; cnt++; printf("\n"); } } void SPACEx (int a) { int kazu; kazu=1; while(kazu<=a) { printf(" "); kazu++; } printf("*"); } void SPACEy (int b) { int kazu; kazu=1; while(kazu<=b) { printf(" "); kazu++; } printf("*"); } 関数が増えて不格好になってしまいましたが、このような形で落ち着きました。 今回はありがとうございました。