Diskuze: C - while cyklus

C++ C a C++ C - while cyklus

Avatar
ZdenBartal
Člen
Avatar
ZdenBartal:

Zdravím,
pokud těsně za while, či těsně před while při do-while cyklu, umístím příkaz scanf(); program jej kompletně ignoruje

příklad kódu:

char znak;
do{
něco
scanf("%c", &znak);
} while(znak =='a');

a zacyklí se.
Nevíte čím by to mohlo být? Tedy je to chyba v kódu, nebo je to něco s ide? Používám kombinaci netbeans/cygwin.

Děkuji

Editováno 14.10.2014 13:01
 
Odpovědět 14.10.2014 12:59
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na ZdenBartal
Jan Vargovský:

Asi tam ještě někde předtím načítáš, takže máš v bufferu ještě hodnoty z předtím a ty si právě vezmeš ty hodnoty z předtím.

 
Nahoru Odpovědět 14.10.2014 13:09
Avatar
Odpovídá na ZdenBartal
Libor Šimo (libcosenior):

Problém je len v tom, že za zadaným znakom stláčas klávesu ENTER a to je tiež znak, musíš ho odstrániť.

Nahoru Odpovědět 14.10.2014 13:40
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na ZdenBartal
Libor Šimo (libcosenior):
#include <stdio.h>

int main(void)
{
    char znak;

    do{
        //něco
        scanf("%c", &znak);
        while (getchar() != '\n') ; // odstránenie znaku enter
    } while(znak != 'a');

    return 0;
}
Nahoru Odpovědět  +1 14.10.2014 13:58
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
ZdenBartal
Člen
Avatar
ZdenBartal:

Díky moc, program jsem přepsal a už to funguje jak má :)

 
Nahoru Odpovědět 14.10.2014 15:19
Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:

Přesně tak, problém je, že scanf bere buffer- vstupní buffer, standardní vstup je klávesnice, proto kdykoliv pracuješ s načítáním hodnot z klávesnice, tak je dobrý nejdřív buffer vyprázdnit :)

fflush(stdin);

=)

char znak;
 do{
 //něco
 fflush(stdin);
 scanf("%c", &znak);
 } while(znak =='a');
Nahoru Odpovědět  +1 14.10.2014 16:06
Unix- svět, kde chcete být nulou :) (UID)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.