3

main() のコードは次のとおりです。

int main (void)
{
float acres[20];
float bushels[20];
float cost = 0;
float pricePerBushel = 0;
float totalAcres = 0;
char choice;
int counter = 0;

for(counter = 0; counter < 20; counter++)
{   
    printf("would you like to enter another farm? "); 

    scanf("%c", &choice);

    if (choice == 'n')
    {
        printf("in break ");
        break;
    }

    printf("enter the number of acres: ");
    scanf("%f", &acres[counter]);

    printf("enter the number of bushels: ");
    scanf("%f", &bushels[counter]);

}


return 0;
}

プログラムが最初の scanf を実行するたびに正常に動作しますが、ループの 2 回目のパスでは、文字を入力するための scanf は実行されません。

4

1 に答える 1

5

%cの前にスペースを追加しscanfます。これによりscanf、読み取る前に任意の数の空白をスキップできますchoice

scanf(" %c", &choice);必要な変更は だけです。

fflush(stdin);beforeを追加するscanf("%c", &choice);こともできます。fflush呼び出しは、scanf を介して次の入力を読み取る前に、入力バッファーの内容をフラッシュします。

入力読み取りバッファに 1 文字しかない場合scanf(" %c", &choice);でも、scanfはこの文字を有効なユーザー入力として解釈し、実行を続行します。scanf を誤って使用すると、[ループ内で使用した場合の無限ループなどwhile] 一連の奇妙なバグが発生する可能性があります。

于 2013-02-01T03:28:43.760 に答える