Diskuze: C - while cyklus

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

Aktivity (1)
Avatar
ZdenBartal
Člen
Avatar
ZdenBartal:14.10.2014 12:59

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ý:14.10.2014 13:09

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):14.10.2014 13:40

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):14.10.2014 13:58
#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:14.10.2014 15:19

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:14.10.2014 16:06

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.