- ベストアンサー
for文について
以下のプログラムにおいて, for文の末尾にセミコロンがついているタイプ( for(...); ) のfor文の制御の流れは,セミコロンがついていないタイプ( for(...) ) と何が違うのでしょうか? for文の末尾にセミコロンがないタイプのものしか知らないため, セミコロンがつくことで流れに何が変化するか知りたいです. 御存知の方がいらしたら,教えてください. 【出力結果】 forの末尾にセミコロンがある 2100 forの末尾にセミコロンがない 700 /*+++++++ ソース ++++++++*/ #include <stdio.h> int main() { int s_tb1[3] = {60,100,150}; int mg_tb[3] = {1,3,4}; int i,size=80,base=600,mode=1,ext=100; for(i=0; size>s_tb1[i]; i++); printf("%d\n", (base+mode*ext)*mg_tb[i] ); return(0); }
- marucha
- お礼率38% (127/329)
- C・C++・C#
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
for文は、 for(i=0; size>s_tb1[i]; i++) の後に、一つの文を書くようになっています。 普通、ブロックが書かれてそれを繰り返すわけですが、 for(i=0; size>s_tb1[i]; i++); の場合は、空文;を繰り返すことになります。 この場合繰り返している間は、次の printf("%d\n", (base+mode*ext)*mg_tb[i] ); は実行されません。 1.forの末尾にセミコロンがある このとき、i==1のときループは終了します。 mg_tb[i] == 1 です。 2.forの末尾にセミコロンがない i==0のときのprintf()文が実行され、同じくそれで終わりです。 ・ 最も単純なケースで動作を確認してみたほうが確実です。
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
>セミコロンがつくことで流れに何が変化するか知りたいです. printf("%d\n", (base+mode*ext)*mg_tb[i] ); が for ループを抜けた後に実行されるということです。 for 文の本体はブロックでなければ、一つの文しか実行されません。 この場合、その一つの文が「;」という空の文になります。 まぎらわしいので、for 文や if 文を書く場合は本体を {} で囲むようにしましょう。
関連するQ&A
- for文の()内のメソッドは?
普通、String型の変数strの長さを知りたいと 思ったら str.length() で調べると思うのですが、 for 文中では、こういう風になりますよね‥‥ for (int i=0; str.length; i++) ただ、while文の()内では、ちゃんとlengthメソッドの 後に()を付けていたはず。 for文の場合の()は特殊なのかなと思うのですが、 これってどういう理屈なのでしょうか? # ;(セミコロン)がどうも怪しい感じなのですが。
- ベストアンサー
- Java
- for文
以下のプログラムのforの条件文がなぜこれで動くのかよくわからないので 教えていただけないでしょうか? #include<stdio.h> int main(void) { int i; char str[] = "ABC"; char *ptr = "123"; for(i=0;str[i];i++) putchar(str[i]); putchar('\n'); for(i=0;ptr[i];i++) putchar(ptr[i]); putchar('\n'); printf("str = \"%s\"\n",str); printf("ptr = \"%s\"\n",ptr); return(0); }
- ベストアンサー
- C・C++・C#
- for文
整数を読み込んで、その値を0までカウントダウンしながら表示するプログラム作りたいのですが、 while文ではできたのですが、for文ではうまくいきません。 どこが間違っているのでしょうか? OS:Windows XP C++Builder X パーソナル #include <stdio.h> int main(void) { int i; int num; printf("整数を入力してください:"); scanf("%d", &num); for(i = num; i <= 0; --i) { printf("%d", i); } return 0; } 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- 簡単なfor文
#include <stdio.h> int main(void) { int n; int i; for(n=0 ;n<10;n++){ for(i=0; i<=n ;i++){ printf("*"); } printf("\n"); } return(0); } こういったプログラムを実行すると、以下のように表示されるのですがなんででしょうか? * ** *** 以下略 自分の考えですと、*は毎回一つしか表示されずに改行されると思うのですが・・・ * * * * 以下略 i個分の*を表示するなどという指示をプログラムはなされていないと思うのですがなぜなんでしょうか? 一つ目のfor文では10回ループが繰り返され改行 二つ目のfor文で*を永遠に表示 といった僕の解釈ではおかしいですよね。 当方C言語初心者で、周りに聞く人がいないため教えていただけると非常に助かりますm(__)m
- ベストアンサー
- C・C++・C#
- for文~break
break文に達した時、for文から抜けますか?それとも、if { }から抜けるんですか? for文はどこまで影響下にありますか? if ( i==5 ) printf ("サーバーが見つかりません"); まででしょうか? また if ( i == 5 ) で5なら、実行としていますが、 6,や,8など5 以外でも、サーバーが見つかりません と if文が実行される見たいですが、なぜですか? 教えてください。 #include<stdio.h> int main(void) { int array[5][2]={ {1,14}, {2,28}, {3,19}, {4,8}, {5,15}, }; int sever; int i; printf("番号を入力してください"); scanf("%d",&sever); for( i=0 ; i<5 ; i++ ) if ( sever == array[i][0] ){ printf ( "%d 番には, %d 人います。\n",sever,array[i][1]); break; } if (i==5) printf("サーバーが見つかりません"); return 0; }
- ベストアンサー
- C・C++・C#
- for文
#include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp; } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。
- ベストアンサー
- C・C++・C#
- 特殊なfor文について
SJC-P 問題集 問13の疑問より for文について教えてください。 一般的なfor文だと次の形だと思うのですが for(int i = 0; i < 5; i ++){ //5回ループする } Animal [] animals = { new Animal(), new Cow() }; for( Animal a : オブジェクト配列animals ){ a.saySomething(); } のような場合、このfor文は 「オブジェクト配列の中にanimalsがあるまでの間、ループする」という意味を指しているのでしょうか? for( クラス名 オブジェクト名 : オブジェクト配列) の一文にある「:」← の役割は何なのでしょうか?
- ベストアンサー
- Java
- for文での外部画像ファイルの読み込み
ステージ上に配置している複数のMCに それぞれ外部画像を読み込もうとしています。 読み込むMCはtb1,tb2,tb3、、というインスタンス名に していますので、それぞれ tb1.loadMovie("1.jpg"); tb2.loadMovie("2.jpg"); tb3.loadMovie("3.jpg"); . . なら表示されるのですが、 MCが20個あるなら for(i=1;i<=20;i++){ var TB:String = "tb" + i; TB.loadMovie(i+".jpg"); } というように簡単な文で書きたいのですが、 上記のfor文ですとうまくいきません。 for文以外でもよい方法があれば、 よろしければ教えていただけますか。 よろしくお願いします。
- ベストアンサー
- Flash
お礼
理解できました。 回答ありがとうございました。