dポイントプレゼントキャンペーン実施中!

File Edit Options Buffers Tools C Help
/九九の表示をwhile文で表示*/
# include<stdio.h>
main ()
{
int a,b,c;
printf("九九の表示(while文)\n");
a=1;
b=1;
while(a<=9){
printf("%dの段\n",a);
while(b<=9){
c=a*b;
a++;
b++;
printf("%d\n",c);
}
}
return (0);
}
これで実行するとめちゃくちゃになるんですがどこを直せばいいでしょうか
a++;あたりの位置がおかしいと思うのですが

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;
}
    • good
    • 0
この回答へのお礼

forをつかわないでやってみようとのことでwhileに挑戦してみました
おかげで解決しましたありがとうございました!

お礼日時:2010/11/07 22:21

 「a++;」の位置もおかしいけど、aのループの中でbが初期化されていないのも問題です。



 普通、こういうのはwhile文じゃなくfor文で作るものなのですが。for文で置き換えてみれば問題点は明らかになると思います。
(学校か何かの課題だったら、for文はまだやってないのかもしれませんが)
    • good
    • 0
この回答へのお礼

forをつかわないでやってみようとのことでwhileに挑戦してみました
ありがとうございました

お礼日時:2010/11/07 22:36

>a++;をbの処理が終わった後実行したいのですが、bのwhile文終了 }のあとに置くと1の段で終了してしまいます^^;



ステップ実行なりで追いかけられませんか?

終了しているのではなく、
「2の段」、「3の段」…としか表示されないのではないですか?
printf("%d\n",c);
が実行されるループの条件はなんでしたかね?
    • good
    • 0
この回答へのお礼

たしかに段の表示だけでした

お礼日時:2010/11/07 00:34

> a++;あたりの位置がおかしいと思うのですが



そうですね。
ヒントとしては、printfを移動して、
c=a*b;
printf("%d x %d = %d\n",a,b, c); /* ここに移動+変更 */

とすると、何が起っているか判ると思います。

期待する変化と実際の変化を見比べて、aが変化するべきときは何時か、を考えればわかると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます
a++;をbの処理が終わった後実行したいのですが、bのwhile文終了 }のあとに置くと1の段で終了してしまいます^^;

お礼日時:2010/11/06 20:05

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