while文でまわすとき、...

[戻る]
イタチ 2002/07/06(土) 09:52:53
while文でまわすとき、()の中の式を評価した値が0でない限り回りつづけますが、()の中に
printfやscanfがあるプログラムを見つけました。 

while(printf(---),scanf(---),式){ 

これは一体どういうことなのでしょうか?()の中にprintfなどを入れる意味が分かりません。

2002/07/06(土) 10:49:48
>while(printf(---),scanf(---),式){ 
>これは一体どういうことなのでしょうか?()の中にprintfなどを入れる意味が分かりません。

printfやscanfにも戻り値はありますよ。

>while文でまわすとき、()の中の式を評価した値が0でない限り回りつづけますが、()の中に
>printfやscanfがあるプログラムを見つけました。 

>while(printf(---),scanf(---),式){ 

>これは一体どういうことなのでしょうか?()の中にprintfなどを入れる意味が分かりません。

駄犬 [E-Mail] 2002/07/06(土) 11:12:52
カンマ演算子(コンマ演算子)です。
順次演算子とも言います。

細かい説明を省くと
    while(printf(---),scanf(---),式){ 
は
    printf(---);
    scanf(---);
    while(式){ 
と等価です。

順次演算子を知らないと言うことはC言語初心者だと思われますが、C言語の入門書は手元に
常備しておきましょう。

駄犬 [E-Mail] 2002/07/06(土) 11:15:18
演習問題。(^^;

| これは、カンマでくぎられた順に左から実行されます。順次演算式の結果は最も右の式の結
果がその値となります。
| c = (a=100, b=10, d=a+b) ;
| これを実行するとd=a+bの結果がcの値となります。つまり、cは110となります。
(http://www.enel.ucalgary.ca/People/far/Lectures/CE/c_lang/c_lang.html#_Toc4656
66211 から引用)

問題1:
    c = (a=100, b=10, d=a+b) ;
この式を先ほどのように分解してみてください。
(制限時間1分)

wood 2002/07/06(土) 11:38:09
>while(printf(---),scanf(---),式){ 
scanf(---)と式の間には変数と言う関係が成り立っていませんか
式の条件によってscanf(---)で入力された値によりループを終了
させたい意図があるのではないでしょうか

駄犬 [E-Mail] 2002/07/06(土) 11:55:59
はうう。
大ちょんぼ(^^;;;;;;;

    printf(---);
    scanf(---);
    while(式){ 

        printf(---);
        scanf(---);
    }

と等価。
大変申し訳ない。
# というか非常にお恥ずかしい。

くたくた 2002/07/06(土) 15:18:44
>while(printf(---),scanf(---),式){ 
>一体どういうことなのでしょうか?()の中にprintfなどを入れる意味が分かりません。
2度読みを避ける為です。これをしないでコードを書いた場合、
printf(---);
scanf(---);
while( 式 ){
   ....
   printf(---);
   scanf(---);
}
というような感じになります。これを避ける為に先述のようなコードにしたのだと思います。
2度読み回避用のカンマ式の典型的な使い型です。

古いスレッドには追加発言できません。