ページ 1 / 1
【解決】continueがうまくいきません
Posted: 2016年8月25日(木) 09:19
by helloworld
カウントを表示するプログラムを作っています。
0
1
2
3
4
6
7
8
9
と出力させたいのにうまくいきません。
どなたか教えてください。
コード:
1 #include <stdio.h>
2 int main(void) {
3 int m = 0;
4 while (m < 10) {
5 m++;
6 if(m == 5) {
7 continue;
8 }
9 // この部分にあるコードがスキップされる
10 printf("m:%d\n",m);
11 }
12 }
Re: continueがうまくいきません
Posted: 2016年8月25日(木) 10:20
by みけCAT
- 変な位置に数字があるので、コンパイルエラーになる
- その蛇足な数字を消すと
- 書式指定文字列が間違っているので、m:という余計な文字列が出力される
- mをインクリメントするタイミングが悪いので、表示する範囲がおかしくなる
という問題がありますね。
例えば余計な数字と文字列を消し、mのインクリメントを出力の後にしてこうするといいでしょう。
コード:
#include <stdio.h>
int main(void) {
int m = 0;
while (m < 10) {
if(m == 5) {
m++;
continue;
}
// この部分にあるコードがスキップされる
printf("%d\n", m);
m++;
}
return 0;
}
若干美しくない気がしますが、初期値をずらすことで範囲を正しくする方法もあります。
m++;を複数書く汚さとトレードオフですね。
コード:
#include <stdio.h>
int main(void) {
int m = -1;
while (++m < 10) { // ここでインクリメントし、インクリメント後の値をチェック
if(m == 5) {
continue;
}
// この部分にあるコードがスキップされる
printf("%d\n", m);
}
return 0;
}
もしくは、for文を使って
コード:
#include <stdio.h>
int main(void) {
int m;
for (m = 0; m < 10; m++) {
if(m == 5) {
continue;
}
// この部分にあるコードがスキップされる
printf("%d\n", m);
}
return 0;
}
Re: continueがうまくいきません
Posted: 2016年8月25日(木) 10:22
by asd
helloworld さんが書きました:カウントを表示するプログラムを作っています。
0
1
2
3
4
6
7
8
9
と出力させたいのにうまくいきません。
どなたか教えてください。
提示されているプログラムをそのまま動かすと以下の様な出力になります。
コード:
m:1
m:2
m:3
m:4
m:6
m:7
m:8
m:9
m:10
あなたの思った結果と何が違っていてどうしたいのでしょうか?
A.”m:”がいらないんだけど!
→printfからm:を消してください
B.0から9まで出したいのに1から10まで出力されてるんだけど!
→mの初期値を-1にするか、m++の実行位置をprintfの後とcontinueの前においてください
continueの前にm++を書かないとm==5の状態ではm++が実行されずにcontinueが実行されるため無限ループになります
ちなみにコメントに書かれている「// この部分にあるコードがスキップされる」は
m++をprintfの後ろに書いた際にm:4の出力以降何も出力されない(無限ループしてるので)ことを指しているのでしょうか?
Re: continueがうまくいきません
Posted: 2016年8月25日(木) 10:27
by みけCAT
helloworld さんが書きました:continueがうまくいきません
そもそも、無駄にcontinueなんか使わなければいいのです。
適材適所。
コード:
#include <stdio.h>
int main(void) {
int m = 0;
while (m < 10) {
if(m != 5) {
// この部分にあるコードがスキップされる
printf("%d\n", m);
}
m++;
}
return 0;
}
オフトピック
ダメ押しで余計とも思えるループも省くと
コード:
#include <stdio.h>
int main(void) {
puts("0\n1\n2\n3\n4\n6\n7\n8\n9");
return 0;
}
Re:解決しました!ありがとうございました!!
Posted: 2016年8月25日(木) 11:16
by helloworld
解決しました!
ご丁寧に解説していただきありがとうございました!
for文でうまくできたので、
while文でもうまくできるのではないかと思って質問させていただいたきました。
カウントアップを使うときは
-1
で始めるか
continue
を2回使う
のですね。
できれば、
-1で始めない
continueは1回
と思っていたのですが、
これは無理なのですね("^ω^)・・・
勉強になりました。
ありがとうございました!
Re: 【解決】continueがうまくいきません
Posted: 2016年8月25日(木) 19:16
by Dixq (管理人)
> できれば、
> -1で始めない
> continueは1回
> と思っていたのですが、
> これは無理なのですね
・-1で始めない
・continueは0回
でよければNo: 4のコードで実現できていると思いますがこれじゃダメですか?
Re: Re:解決しました!ありがとうございました!!
Posted: 2016年8月25日(木) 23:40
by box
helloworld さんが書きました:
continue
を2回使う
どこにそういう回答があったでしょうか。