0

私はクラスの課題 (採点なし) に取り組んでいますが、このコードが原因でプログラムが「ハング」するのに対し、ループを実行する理由が不明です。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int nbStars = 0;        // User defines the number of stars to display
    int nbLines = 0;        // User defines the number of lines on which to print

    // Obtain the number of Stars to display
    printf("Enter the number of Stars to display (1-3): ");
    scanf("%d", &nbStars);
    getchar();

    //   Limit the values entered to between 1 and 3
    do {
        printf("Enter the number of Stars to display (1-3): ");
        scanf("%d", &nbStars);

        if (nbStars < 1 || nbStars > 3) puts("\tENTRY ERROR:  Please limit responses to between 1 and 3.\n");
    } while (nbStars < 1 || nbStars > 3);
}
4

2 に答える 2

1

通常、出力は行バッファリングされます。新しい行 ( "\n") を出力しない場合、出力は表示されません。プログラムはハングしていません。入力を待っているだけです。

注: dowhile ループを使用している場合、ループの前に入力を求めるのはなぜですか? 適切な入力があっても、プログラムはループに入ります。に初期化さdoれていなくても機能します。nbStars0

while (nbStars < 1 || nbStars > 3) {
    printf("Enter the number of Stars to display (1-3): \n");
    scanf("%d", &nbStars);

    if (nbStars < 1 || nbStars > 3) puts("\tENTRY ERROR:  Please limit responses to between 1 and 3.\n");
}
于 2012-09-03T18:19:27.463 に答える
1

コードは GCC を使用する Linux と GCC を使用する Windows 7 cygwin の両方で動作するため、何か他のことが起こっているに違いありません。使用している入力と環境について詳しく教えてください。

次のコードを試して、異なる動作が得られるかどうかを確認してください。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int nbStars = 0;        // User defines the number of stars to display
    int nbLines = 0;        // User defines the number of lines on which to print

    // Obtain the number of Stars to display
    do
    {
        printf("Enter the number of Stars to display (1-3): ");
        scanf("%d", &nbStars);

        if (nbStars < 1 || nbStars > 3)
        {
            puts("\tENTRY ERROR:  Please limit responses to between 1 and 3.\n");
        }
    }while (nbStars < 1 || nbStars > 3);

    printf("You entered %d\n", nbStars);
    return( 0 );
}
于 2012-09-06T17:34:50.427 に答える