C/C++のfor文について疑問がある

このQ&Aのポイント
  • C/C++の基本的なfor文の書き方について質問します。
  • for文で複数の文を書く場合、カンマを使用することができますが、式の部分にfor文を記述するとエラーが発生します。
  • なぜfor文の式に別のfor文を書くことができないのか疑問に感じています。
回答を見る
  • ベストアンサー

C/C++ for文

ふと疑問に思ったことなんですが、検索して調べても簡単に出てこなかったので 質問させていただきます。 C / C++ の文法に for 文がありますが基本的な for 文の書き方と言えば以下のようになりますよね。 for (int i = 0; i < 10; i++); この中の式に注目してほしいのですが、i = 0, i < 10; i++ のようにいずれも 1 つの文を書くことはできますよね。2 つの文を書きたい場合でも i++,i++ のようにカンマを使えば、2 つどころか 3 つ以上の文を書くことができます。 ここで、その式の部分に for 文を入れてみたらエラーが返ってきました。普通はこの部分に for 文を入れるなんてことはしないのでよくわからないのですが、なぜエラーが返ってくるのでしょうか。printfのような出力文でもいけるのに、for 文などではダメな理由がよくわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.1

forの(の次に要求されているモノは、文(statement)ではなく数式(expression)である。 for文の仕様は for ( [数式1]; [数式2]; [数式3] ) 文   ([]は省略可能を表す) なのだ(引き続く「文」は省略できない。何もしないなら「;」などのように「文」を書かないといけない) >この中の式に注目してほしいのですが、i = 0, i < 10; i++ のようにいずれも 1 つの文を書くことはできますよね。 それは間違い。「文を書くこと」は出来ない。書けるのは「数式が1つだけ」だ。 >2 つの文を書きたい場合でも i++,i++ のようにカンマを使えば、2 つどころか 3 つ以上の文を書くことができます。 それも間違い。数式は1つしか書けない。 この場合のカンマは「カンマ演算子」であって、+や-や*や/と同じ「演算子」である。 「i++,i++」は「i++,i++で1つの数式」であって、これを「2つ」とは数えない。2つと数えるのは間違いだ。 >for 文を入れるなんてことはしないのでよくわからないのですが、なぜエラーが返ってくるのでしょうか。 数式(expression)しか許されない場所に、文(statement)を書いたからだ。 >printfのような出力文でもいけるのに、for 文などではダメな理由がよくわかりません。 printf()は「文」ではない。関数を含む「数式」だ。 質問者さんは「数式(expression)」と「文(statement)」の区別が判ってないようなので、Cの基礎から勉強し直した方が良い。

関連するQ&A

  • 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; } 宜しくお願いします。

  • for文

    for文なのですが、 scanfで得た、 iを for文のi--で、一づつへらしてますが、 0でfor文がおわりますが 0で終わりの記述がない気がするんですが、 どうしてでしょか? int main(void) {    int i;    printf("正の整数を入力してください。\n");    scanf("%d",&i);    for( ; i ; i--)    printf("qが入力されました。\n");    return 0; }

  • 簡単な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++のfor文について

    C++では for ( int i = 0, j = 0; i < 10; i++ ) { } みたいな感じでforのなかで変数の宣言ができます。 ところで上の例ですとint型のiとjを2つ宣言していますが、 もしint型とchar型を宣言したい場合などは char j; for ( int i = 0; i < 10; i++ ) { } みたいにしないといけないのでしょうか? for ( int i = 0, char j; i < 10; i++ ) { } みたいにできると思ってやったらエラーになってしまうので・・。

  • 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); }

  • 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; }

  • 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言語のfor文について

    C言語のfor文について C言語初心者です。質問させていただきます。 output.datというバイナリファイルに値を書き込みたい(100~149)のですが、どうもうまくいきません。 値が半分だけ正常に入って、あとの半分はおかしな値が入ります。 どなたか分かる方教えていただけないでしょうか。 ソース(一部分)↓ int main(){ int i,j; char output[456]; //ファイルに値を入れる for(i=0,j=100;i<456,j<556;i++,j++){ output[i]=j; } //バイナリ書き込みモードでファイルをオープン if((fp = fopen("output.dat","wb")) == NULL) { printf("<output.dat> file open error\n"); exit(1); } //値をファイルに書き込む fwrite(output,456,1,fp); fclose(fp); exit(0); }

  • C言語でfor文を用いたプログラミングについてです。

    C言語のプログラミングの課題で以下のような表をfor文を用いて作るというものが出ました。 商品名 単価(円)個数(円) 計  A  50   20   ***  B  90   30   ***  C  30   80   ***        合計金額   *** A,B,C及びそれぞれの単価、個数の値はキーボードからの入力で、***は演算によりその結果を出力するようにします。つまり、商品名(1文字)と単価、そしてその個数をキーボードから入力すると、単価と個数をかけた値と、それら全ての合計が出力されるようなプログラムを作るということです。 私は以下のようなプログラムを作りました #include<stdio.h> int main(void) { int a,b,c,sum,allsum,i; printf("商品名 単価 個数 計\n"); for(i=1;i<=3;i++) { a=getchar(); scanf("%d %d",&b,&c);  sum=b*c; allsum +=sum; putchar(a); printf(" %d %d %d \n",b,c,sum); } printf("合計金額 %d\n",allsum); return 0; } しかしこれでは合計金額がちゃんと表示されなかったりしてうまくいきません。おそらくfor文の中身に問題があると思うんですが…。どうか正しいプログラムと、なぜこのプログラムではうまくいかないのかを教えていただきたいです。なにぶん初心者なもんで、よろしくお願いします。

  • C言語のforとwhileについて・・・

    C言語で「While 文を使って、1から100までの和を求めて表示するプログラムを作る」ことをやってみました。↓ ですが、forではできたのですが、whileでは動きませんでした。 whileで作る時は、forのどの部分を変えれば出来るんでしょうか? 解説できましたら、お願いします。。 #include <stdio.h> int main(void) { int i,wa; wa=0; for(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }

専門家に質問してみよう