あなたのコードの問題は、予測できない結果を伴う操作を使用することです。具体的には、int x;
を初期化せずに宣言してから、while(x)
の終了条件として使用することが問題です。多くのプラットフォームやコンパイラでは、これはすでにメモリにある値がすべてx
であったものを保持します。その場合、x
が値ゼロで始まり、ループは決して実行されないので、印刷ステートメントは表示されません。
あなたは無限ループにあなたのループを作る必要があります。これは156
自体を除く値を出力します
int main()
{
int x;
for(x = 14; ; x++) {
if(x % 2 == 0) {
continue;
}
if(x >= 156) {
break;
}
printf("%d\n", x);
}
return 0;
}
[IDEOne link]
。 156
を含めるには、printf
呼び出しの後break
条件を置く:
printf("%d\n", x);
if(x >= 156) {
break;
}
代わりにあなただけの>
に>=
を変更することができます。
break
またはcontinue
の場合は、else
は必要ありません。
int main() {
int x = 14;
while(1) {
if(x % 2 == 0) {
x++;
continue;
}
if(x >= 156) {
break;
}
printf("%d\n", x++);
}
return 0;
}
[IDEOne Link]
あなたが避けることができます:あなたはあなたcontinue
は無限ループを避けるために、前にインクリメントする必要があるため
あなたは、whileループを使用する必要がある場合は、状況は少し複雑です余分な増分あなたはcontinue
を見送ることができた場合:
int main() {
int x = 14;
while(1) {
if(x % 2) {
printf("%d\n", x);
}
if(x++ == 156) {
break;
}
}
return 0;
}
[IDEOne Link]
x % 3 == 0
のチェックを削除しました。その目的が問題の制約内にあるかどうかは不明なためです。無限ループで
変更'。おそらく 'x'はゼロに初期化されます。 –
ちょうど奇数を探しているなら、なぜy%3を使っていますか? – Kai
@MadPhysicistはそれを信じていません:初期化されていない変数を使用することは未定義の動作です。 'x'はまったく初期化されません。 –