Błąd w czyszczeniu buforu?!

0

Dzień dobry,
podczas w moim kodzie występuje błąd, ponieważ podczas switcha przy pierwszym błędnym wpisaniu opcji pojawia się poprawny komunikat(nieznane polecenie ...), niestety kiedy podana opcja jest poprawna, a po niej nastąpi błędna(chodzi mi tu o wpisanie liter zamiast liczb, przy liczbach działa jak powinno) to zamiast komunikatu o błędzie wykonuje się ostania poprawna wpisana opcja(np. wpisuje 2(wykonuje sie instrukcja), potem np "asd" i zamiast komunikatu nieznane polecenie wykonuje się instrukcja dla opcji 2). Instrukcje w switch usunalem bo sa raczej nieistotne. Dodaje funkcje usuwania buforu, moze to z nia jest cos nie tak? Z góry dziękuje za pomoc :)

int main(){
 menuSekwencji();

    int numer ;
    while( 5 != numer ){

        scanf("%d", &numer);
        czyscBuf();



        switch(numer){
        case 1:
            


            break;
        case 2:




            break;
        case 3:
            


            break;
        case 4:

            puts("4.");
            break;
        case 5:

            puts( "Koniec programu." );
            break;

        default:
            puts("Nieznane polecenie, wpisz numer jescze raz.");
            getchar();
            break;

        }
        menuSekwencji();
    }
    return 0;
}
void czyscBuf(void){
while ( getchar() != '\n' );
}
0

Wg mnie scanf nie dopasował niczego do wzorca zatem wartość zmiennej numer pozostała taka jaką wpisałeś za pierwszym razem.

2

Sprawdzaj wartość zwracaną przez scanf(). Jeśli wczytanie się nie powiedzie, to je ponów.

1

Dodam jeszcze ze przy takiej konstrukcji:

     int numer ;
    while( 5 != numer )

pierwsze wejscie do petli zadziala losowo... W przypadku kodu w trybie debug mozliwe, ze bedzie tam 0, ale w kodzie release moze sie okazac, ze bedzie cokolwiek np 5...

1 użytkowników online, w tym zalogowanych: 0, gości: 1