-1

以下のコードは5つの数字を要求し、指定された数字のアスタリスクを出力します。数値変数は5つの数値をどのように記憶しますか?次に入力された数値は変数内の値を破壊しませんか?理解できない。説明してもらえますか?

以下のコードは出力を示します:

Enter 5 numbers between 1 and 30: 28 5 13 24 7
    ****************************
    *****
    *************
    ************************
    *******


#include <stdio.h> 
int main( void ){    
    int i;      
    int j;      /* inner counter */   
    int number; /* current number */   
    printf( "Enter 5 numbers between 1 and 30: " );  /* loop 5 times */   
    for ( i = 1; i <= 5; i++ ) {
        scanf( "%d", &number );      /* print asterisks corresponding to current input */      
            for ( j = 1; j <= number; j++ )      
            printf( "*" );

    printf( "\n" );
    } /* end for */   
return 0; 
 } 
4

5 に答える 5

4

あなたの質問に対する答えは次のとおりです。「Enter」を押すと、テキストがstdinにダンプされます。scanf(..)は、stdinから読み取り、5つの整数すべてを(1つずつ)解析します。scanfは、stdinが空の場合にのみブロックします。したがって、値は数値変数ではなくstdinに格納されます。

于 2013-02-26T14:31:26.340 に答える
2

これは、各読み取りの間に印刷が行われるためです。scanfはループの内側にfor ( i = 1; i <= 5; i++ )あり、2番目のループも同様であることに注意してくださいfor ( j = 1; i <= number; j++ )

つまり、実際に何が起こるかは次のとおり
です。1.入力をnumber
2に読み込みます。アスタリスクを印刷します。3。1に進み
ます。

コードは実際には5つの数字すべてを記憶しているわけではなく、現在の数字だけを記憶しています。

于 2013-02-26T14:22:47.207 に答える
1

ええ、それは非常にIQタイプの質問です。行printf( "1から30までの5つの数字を入力してください:");を見てください。

値を取るための「forループ」よりも。このループは残りのコードをカバーします。したがって、最初の「数値」が値を取得すると、2番目の「forループ」が開始され、終了後に1番目の「forループ」に戻ってキーボードなどから2番目の入力を取得します。

于 2013-02-26T16:56:16.073 に答える
0

5つの数字すべてを保持しているわけではありません。コードはnumberの値を設定してから、関連する*文字数を出力します。次に、最初のforループの連続した反復で新しい値を受け取ります。変数は、同時に複数の値に設定されるのではなく、再利用されます。

于 2013-02-26T14:22:24.663 に答える
0

プログラムに数値を入力するたびに、「intnumber」がその数値に設定されます。

古い値は置き換えられ、アクセスできなくなりました。

ここでそれについて読んでくださいhttp://en.wikipedia.org/wiki/Variable_(computer_science)

Cでプログラミングを開始するのではなく、Pythonのようなものから開始することをお勧めします。

于 2013-02-26T14:22:38.283 に答える