2017-11-22 3 views
-1

私はif文とif-else文があるコードに問題があり、整数を入力する必要があり、そうでなければ再度数値を入力する必要があります。コードはwhile文であり、問​​題は、iは整数よりも、何かを入力すると、ループはelseステートメントを与える立ち往生ということです。また、コードはwhile文C - if-else文がスタックしてクラッシュする

while (1) { 
    blink_leds(); 
    number_console(); 
} 
に使用されている

static inline void number_console(void) 
{ 
int x = 0; 
fprintf_P(stdout, PSTR(GET_NR_MSG)); 
lcd_goto(0x40); 

if (scanf("%d", &x) == 1 && x >= 0 && x <= 9) { 
    printf("\nYou entered number: "); 
    fprintf_P(stdout, (PGM_P)pgm_read_word(&numbers[x])); 
    fputc('\n', stdout); 
    lcd_puts_P((PGM_P)pgm_read_word(&numbers[x])); 
    lcd_putc(' '); 
} else { 
    printf("invalid input\n"); 
    } 
} 

をクラッシュ

答えて

3

まあ、あなたは問題の半分を世話しました。

scanf()のエラーをチェックしましたが、それは問題ありませんが、一致が失敗した場合、バッファ内の入力は消費されずにそこに残ります(scanf()が読めるのを待っています)。

このように、同じ入力(無効)が繰り返し供給されます。 scanfチェックのelse部分では、無効な入力のバッファをクリーンアップする必要があります。それを行うための基本的な方法は、

} else { 
    printf("invalid input\n"); 
    while (getchar() != '\n'); 
    } 
} 
+0

です。また、ユーザーがEnterキーを押すと予想される場合は、getsc()の後にscanf()を入力してください。 – Lundin

関連する問題