• 締切済み

for文

C言語の本を読んでいて、for文の(i=0;i<count;--i)とあるのですが for(i=0;i<count;i--)とどう違うのでしょうか?それぞれコンパイルした のですが、同じように実行できましたので、余計にわからなくなりました。

みんなの回答

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

> for(i=0;i<count;i--) そういえばこのコードおかしくない? iは0から始まってどんどん小さくなるから countが1以上の時ループはずっと(オーバーフローでも起こらない限り)とまらないよ。 forブロック内でiやcountに代入してるとかbreak文があるなら別だけど。

koha415
質問者

お礼

書き方が間違っていました、本の内容を一部抜き出して書いたもので お手数をかけました。

  • luckymako
  • ベストアンサー率55% (29/52)
回答No.2

for文で質問と全く同じ様に書くのであれば 結果は同じになります。 仮に for(i = 0; i-- < count; ) と for(i = 0; --i < count; ) の様な書き方に変更すると結果が異なるはずです。 これは以下のことによります。 ・C(C++,Javaなんかも)では式も(が)値を持つ。 ・--は1を引く演算子で、i--も--iも1を引くことをあらわす式である。 ・i--という式は1引かれる前の値を持ち、--iは1引かれた後の値を持つ。 例 int i = 10; int j = 10; int a = --i; int b = j--; とすると各変数の値は i = 9 j = 9 a = 9 b = 10 となります。

koha415
質問者

お礼

ありがとうございます、丁寧な回答、たすかりました。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

そのコードでは前置と後置の違いはありません。同じです。

koha415
質問者

お礼

ありがとうございます、ネットで調べたのですが 同じような質問がなくて助かりました。

関連するQ&A

  • for文を用いて

    みなさん、こんにちわ。C言語についてわからないことがありましたので、質問させていただきます。 C言語の本でfor文を用いて1~10までの和を求める例題は数多くありますが、(i=0,i<=10,i++) 1+2+1+2+1+2+… のように二種類のパターンがでてきたときはどのようにfor文で組めばよいのでしょうか?合計とその途中の計算も結果出力したいのですが、わからず困っています。ご教授よろしくお願いします。

  • 簡単な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

  • for文のループがされません

    #include <stdio.h> main() { int n, count, c; int d = 50000; printf("整数を入力:"); scanf("%d",&n); for(count = 1; count <= n; count++){ c = d * (16 / 100); d += c; } printf("%d回目の数はは%dです\n",n,d); } というプログラムを作ったのですが、for文のところが実行されずに、 1回目ならば58000となるはずなのに初期値のまま50000と表示されてしまいます。 どなたかご指摘お願いします。

  • linuxのfor文についてです。

    linuxのfor文(C言語風)を利用して/var/log/httpd/にあるaccess.logのファイルのうち130301~130309のものをls -lで情報を表示したいです。 ここでbashのfor文を使って最後の1文字だけを変化させながらls -lを9回実行するシェルスクリプトを作りたいのですがどのように書いたら良いのかわかりません。 どなたか教えていただけないでしょうか。

  • for文

    for文ですが、入れ子になってるので、 i が1の時、iが1 i が1の時、iが2 i が1の時、iが3 ・・・ i が2の時、iが1 i が2の時、iが2 i が2の時、iが3 ・・・ iが3の時、iが1 iが3の時、iが2 iが3の時、iが3 ・・・ 上記の様な増え方ではなかったのですが、 実行結果 123456789 どの様に読むか、教えてください。 for文でiを二回使っているのでバグっているのですか? int i; for(i=1;i<10;i++) for(i=1;i<10;i++) printf("%d",i);

  • 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 文などではダメな理由がよくわかりません。

  • for文のフローチャート

    c言語です。 for文のフローチャートを教えてほしいです。 カウンタ更新、初期値設定、継続条件、真偽、処理 この5つを使って書いたfor文のフローチャートを教えてください。

  • n重のfor文にするには?

    C言語の勉強をしはじめた者です。 よろしくお願いします。 「整数nを入力したときにn重for文にするにはどうしたらよいでしょうか?n個for文の中身の条件は、それぞれ異なりますが、nに依存した条件です。 」 たとえば、n=3と入力したとき、 for(i=1;i<=3;i++){ for(j=i+1;j<=4;j++){ for(k=j+1;j<=5;k++){ ... }}} また、 たとえば、n=5と入力したとき、 for(i=1;i<=3;i++){ for(j=i+1;j<=4;j++){ for(k=j+1;k<=5;k++){ for(l=k+1;l<=6;l++){ for(m=l+1;m<=7;m++)} ... }}}}} という感じに整数nを入力すると、その分、for文がでて、機能するようなプログラムはどうすればいいでしょうか? よければアドバイスください。 質問の仕方が下手くそですいません..

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

  • do - while 文

    以下のコードをコンパイル後実行すると、0~9までの出現回数がわかるのですが、処理を続けますか?と出た後yを入力するともう一度 do 以降を実行するようにしたいのですが、yを入力する前にプログラムが終了してしまいます。何がいけないんでしょうか? #include <iostream> using namespace std; int main (void) { int i; char cont; char c; int count[10] = {0}; do{ while (cin.get(c)){ switch (c){ case '0': count[0]++; break; case '1': count[1]++; break; case '2': count[2]++; break; case '3': count[3]++; break; case '4': count[4]++; break; case '5': count[5]++; break; case '6': count[6]++; break; case '7': count[7]++; break; case '8': count[8]++; break; case '9': count[9]++; break; } } for (i =0; i < 10; i++) cout << i << "の出現回数は" << count[i] << "\n"; cout <<"処理を続けますか?(y/N)"; cin >>cont; }while (cont == 'y'); }

専門家に質問してみよう