- ベストアンサー
九九の表示をwhile文で表示
- 九九の表示をwhile文で実行する際にエラーが発生する問題があります
- a++の位置が適切でない可能性があります
- エラーの原因を特定し、修正する方法を教えてください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
巷では for() バージョンばかりなので、while() をやってみようということのようですが、a と b と c と printf() に手を加えると...縦と横が同じ出力結果となるこんな感じ。 http://karetta.jp/book-node/c-for-beginners/228245 結果としては、怪しげな c(?)をなくすと見通しが良くなりますよね。 # include<stdio.h> int main(void) { int a,b; // ← cを削除 printf("九九の表示(while文)\n"); a=1; while(a<=9){ printf("%dの段:",a); b=1; // ←初期化のため、ここに移動 while(b<=9) printf(" %2d",a*b++); // ← cを削除し、連続出力 printf("\n"); // ←連続出力もここまで a++; // ←内ループの後に加算のため、ここに移動 } return 0; }
その他の回答 (3)
- magicalpass
- ベストアンサー率58% (378/648)
「a++;」の位置もおかしいけど、aのループの中でbが初期化されていないのも問題です。 普通、こういうのはwhile文じゃなくfor文で作るものなのですが。for文で置き換えてみれば問題点は明らかになると思います。 (学校か何かの課題だったら、for文はまだやってないのかもしれませんが)
お礼
forをつかわないでやってみようとのことでwhileに挑戦してみました ありがとうございました
- Wr5
- ベストアンサー率53% (2173/4061)
>a++;をbの処理が終わった後実行したいのですが、bのwhile文終了 }のあとに置くと1の段で終了してしまいます^^; ステップ実行なりで追いかけられませんか? 終了しているのではなく、 「2の段」、「3の段」…としか表示されないのではないですか? printf("%d\n",c); が実行されるループの条件はなんでしたかね?
お礼
たしかに段の表示だけでした
- kmee
- ベストアンサー率55% (1857/3366)
> a++;あたりの位置がおかしいと思うのですが そうですね。 ヒントとしては、printfを移動して、 c=a*b; printf("%d x %d = %d\n",a,b, c); /* ここに移動+変更 */ とすると、何が起っているか判ると思います。 期待する変化と実際の変化を見比べて、aが変化するべきときは何時か、を考えればわかると思います。
お礼
ありがとうございます a++;をbの処理が終わった後実行したいのですが、bのwhile文終了 }のあとに置くと1の段で終了してしまいます^^;
お礼
forをつかわないでやってみようとのことでwhileに挑戦してみました おかげで解決しましたありがとうございました!