logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

getchar() pomija drugą cyfrę - jak to naprawić?

michalsokol 23 Sty 2007 20:13 1981 5
REKLAMA
  • #1 3479206
    michalsokol
    Poziom 12  
    Posty: 112
    Ocena: 18
    witam. napisalem czesc programu ktory pobiera znaki od uzytkownika, potrzebne mi to bedzie bo dalej bede uzywal instrukcje if. ale juz w tym momencie mi nie dziala. pierwsza pobiera ok. a jak mam pobrac druga cyferke to nie moge jej podac tylko program przeskakuje dalej do "printf ("podana literka");" wie moze ktos jaka moze byc tego przyczyna??

    int cyferka,cyferka2;

    printf ("podj pierwsza cyferke\n\n");
    cyferka=getchar();


    printf ("Podaj druga cyferke:\n");
    cyferka=getchar();

    printf ("podana literka");
  • REKLAMA
  • #2 3479251
    michcio16
    Poziom 12  
    Posty: 98
    Ocena: 3
    Teoretycznie problemu nie ma ;)
    W praktyce:

    getchar pobiera jeden znak ,by potwierdzić wysłanie znaku wciskasz enter "\n" , który jest potem automatycznie używany w następnym getchar.


    wyczyść bufor.
  • REKLAMA
  • #3 3479348
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 3479412
    michcio16
    Poziom 12  
    Posty: 98
    Ocena: 3
    BC109B napisał:
    Albo daj samo getchar() po pierwszym wywołaniu i znak \n trafi donikąd.


    Powiedz że tylko chciałeś zażartować ?

    A może to ci rozjaśni coś troszke umysł :


    fflush( stdin );
  • REKLAMA
  • #5 3480122
    michalsokol
    Poziom 12  
    Posty: 112
    Ocena: 18
    WIELKIE DZIEKI!!:)
  • #6 4415222
    k4be
    Poziom 31  
    Posty: 2129
    Pomógł: 102
    Ocena: 333
    Mam problem zdaje się związany z tematem.
    Coś takiego:
    while(scanf("%d %d %d",&a,&b,&c)!=3){
    	fflush(stdin);
    	printf("Bledne dane. Podaj je ponownie:\n");
    }
    po podaniu błędnych danych zapętla się, i ciągle wyświetla komunikat. Czy fflush nie działa, czy przyczyna jakaś inna? Używam kompilatora g++ (gcc 4.1.1) pod systemem Linux.
    Również getchar() (bez parametrów) użyty po scanf zawsze przechodzi jakby go nie było. Trzeba dać następny żeby poczekał na enter.

    EDIT: Rozwiązałem sam: http://ubuntuforums.org/showthread.php?t=83694
REKLAMA