1

私はプログレスバーを作るためにフラッシュを使用しようとしています。フラッシュをテストするために、私は以下の小さなコードを書きました。

「sleep(1);」のコメントを外すと、想定どおりに機能します。ただし、コメントアウトされたままの場合は、予期しない方法で機能します。最初のダッシュを印刷し、残りの9つすべてを印刷するよりも待機して終了します。

なぜそれが違いを生むのか分かりません。

int main()
{
    int f,j;
    j =0;
    for(f=0;f<10;f++)
     {
        printf("-");
        fflush(stdout);
        while(j++<1000000000);
        //sleep(1);
     }
}
4

4 に答える 4

2

jwhileループの後、ゼロに戻す必要があります。次の反復では、whileループをスキップします。

于 2010-10-01T02:26:49.813 に答える
1

jこれは、外側のループが繰り返されるたびに内側のループカウンターをゼロにリセットしないためです。つまり、while()は最初にのみ実行されます。そんなことはありませんfflush():)

于 2010-10-01T02:26:52.133 に答える
1

最初の'for'反復f=0では、最初のダッシュを出力し、次にj最大10億まで実行します。その後、jが10億より大きいため、待機や遅延がなくなるため、残りの9つのダッシュが印刷されます。sleep(1)コメントアウトされている場合は、このように実行する必要があります。

j=0;whileループの後に行を追加して、jをゼロにリセットすることをお勧めします。

コメントを外すsleep(1)と、各ダッシュを印刷した後、ほとんど目立たない小さな遅延(1ミリ秒だと思います)が発生します。

于 2010-10-01T02:43:19.930 に答える
1

次のようにforループを変更します。

から:

for(f=0;f<10;f++)

に:

for(f=0, j=0; f<10; f++, j=0)
于 2010-10-01T03:40:11.203 に答える