![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ループプログラムでfor( ; ; ){ の; ;てどんなループですか?
以下参考にされてください。
練習問題 5-18
数値を繰り返して入力し、0が入力されたら入力を止め、それまでの合計を表示するプログラムを作成しなさい。
________________________________________
int sum = 0;
int value;
for( ; ; ){
scanf( "%d", &value );
if( value == 0 )
break;
sum += value;
}
printf( "合計は%d", sum );
No.5ベストアンサー
- 回答日時:
・for文では初期値の設定を行わない
・for文ではループを終了する条件を指定しない
・for文ではループのたびに実行する付加実行式を指定しない
ということだと思いますが・・・。
あくまでも ”for文では” 行わないということで。
ご回答ありがとうございました。
皆様のご回答をすべて読んで、どうしても私の知識で
解釈ができないのは飛ばして、私の知識内で試してみました。
A;「あくまでも ”for文では” 行わないということで。」
でヒントを得ました。forでループはするが、条件を指定しないと解釈しました。
100%理解はしていませんが、沢山問題を説くことにより理解を深めていきたいと思います。
以下実際にプログラムを動かしてみました。
入力した数字2 2 2 2 と入力したところ 表示された文字
合計は2合計は4合計は6合計は8
No.8
- 回答日時:
>ループプログラムでfor( ; ; ){ の; ;てどんなループですか?
例えば、
----------
#include <stdio.h>
int main(void){
int i;
for(i=0; i<10; i++){
printf("%d ", i);
}
printf("\n");
return 0;
}
----------
という0から9まで出力するプログラムを取り上げる。
C言語は構造化言語であるから、for()文というのがあって繰り返して { } の中の実行文printf()を繰り返して行うことができる。
では、実際の機械語レベルではどうなのであろうか?
機械語、すなわち、アセンブラはそのような構造化言語構造を持っていないから、1行1行が一つの処理を行うことになる。
処理はあくまでも一行なのでgoto文を使うことになる(実際は相対ジャンプ)。
それは、一行で行う goto文を使うと上記 for(処理(1); 処理(2); 処理(3))文は次のように記述できる。
----------
#include <stdio.h>
int main(void){
int i;
i = 0; //処理(1)
HEAD: if(!(i < 10)) goto TAIL; //処理(2)
printf("%d ", i);
i++; //処理(3)
goto HEAD;
TAIL: printf("\n");
return 0;
}
----------
そこで、処理(1),(2),(3)を省いてfor( ; ; )文にするとそれは
----------
#include <stdio.h>
int main(void){
int i=0; //無限ループ時の出力を0にあえて統一
; //処理(1)
HEAD: ; //処理(2)
printf("%d ", i); //実行文
; //処理(3)
goto HEAD;
TAIL: printf("\n");
return 0;
}
----------
と書ける(コンパイラがアセンブラ展開する)。
これをコンパイルすると、実行文 printf()を繰り返す無限ループとなる(コンパイル、実行すると無限ループとなるので ctrl+c で強制終了のこと)。
for( ; ; )は、{ } で囲まれた実行文を無限に繰り返す。
No.7
- 回答日時:
> 空がなぜ真と決まっているのでしょうか?これを論理的に説明している文を読んだ記憶がありません。
for文のexpression-2についてはそう決まっているからです。
C99の規格には、
for (clause-1; expression-2; expression-3) statement の
clause-1, expression-3は省略可能であり、expression-2が省略された場合はゼロではない定数と入れ替えられる
と書いてあります。
www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
6.8.5.3 The for statementの2節。
No.6
- 回答日時:
≻です。
言語仕様を確認すると、「何にもない」というのも「式」です。とありますが式を省略できるのは「式文」「for文」「return文」だけです。
if、switch、caseラベル、do、whileでは式を省略できません。
No.4
- 回答日時:
回答でなくて申し訳ないですが、ちょっと興味深いので、書かせて頂きます。
No.2の方がサラリと言っていますが、
>空だから「偽」にならない
空がなぜ真と決まっているのでしょうか?これを論理的に説明している文を読んだ記憶がありません。
私の遥かな遠い記憶では、「for(;;)は無限ループ」と問答無用に決まっていた気がするのですが。
No.2
- 回答日時:
でも書いたように、
for(式1;式2;式3)で
・ループを開始する前に式1を実行
・式2の値を評価して「真」ならループを実行
・1回ループするたびに式3を実行
です。言語仕様を確認すると、「何にもない」というのも「式」です。
・ループを開始する前に式1を実行→空だから何もしない
・式2の値を評価して「真」ならループを実行→空だから「偽」にならない
・1回ループするたびに式3を実行→空だから何もしない
となり、無限ループになります。
前の回答で「間違えると、無限ループになる場合もある」と書きましたが、これは積極的に無限ループを作っています。
No.1
- 回答日時:
見たまんまなんだけど。
初期化しない、条件判定しない、カウントアップ(ダウン)もしませんよってだけ。
いわゆる無限ループ。
抜けるのは、forの中にあるbreakで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
if文でスキップしたい場合は?
-
入力した文字列から母音だけを...
-
プログラミングC言語についての...
-
if文の中にfor文なのか、for文...
-
Excel VBAで年度をまたぐ期間の...
-
C言語のwhile()文での大括弧の...
-
C言語forループが完結した場合...
-
C言語初心者です。このプログラ...
-
C言語 数字を削除する関数
-
getchar()の記述
-
無限ループ対策
-
独習C 素数テスタ・・・分から...
-
C言語 while文 無限ループ 不可...
-
ループの特定入力終了
-
C言語について
-
COBOLのEVALUATE文
-
H8/3048マイコンAD/DA変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
For文の終了値を関数にしても問...
-
C言語forループが完結した場合...
-
エクセルVBAで Do While (1)って?
-
入力した文字列から母音だけを...
-
if文の中にfor文なのか、for文...
-
Excel VBAで年度をまたぐ期間の...
-
C言語、whileループを抜け出す...
-
for文while文の無限ループの違...
-
プログラムで関数は使わない方...
-
Cプログラムが終了しない
-
PIC のプログラムについて ど...
-
アルゴリズムです!四つの数字...
-
UWSCにてある一定の動作を無限...
-
繰り返し文の利点について
-
ループの特定入力終了
-
PAD図の書き方
おすすめ情報