Diskuze: Nefunguje scanf
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Protože scanf načte první znak co tam je, a protože jsi zadal předtím
číslo, a odentroval, tak se načetlo číslo, a enter tam zůstal, a ten pak
ten druhy scanf načte tedy
nečeká až něco zadáš ty:)
Právě jsem na to přišel, musí tam bát místo scanf("%c" ... scanf("%s" ..., že ano?
Ne, zprávně bys měl vyčistit buffer předtím, než načteš znak, tedy
něco ve stylu fflush(stdin); není to sice nejkorektnější, ale ano, udělá
to to, co ty chceš, tedy načíst znak, co on zadá, tím že tam dáš string,
tak se ti načtou i to před tím, tedy nebude to pořád to v, ale teda pokud
se nemýlím. Tím fflush se to řeší asi nejrychleji, ti to vyčistí stdin
buffer a pak načte znak co zadáš teprv
Mám dojem, že by mohlo zafungovat když tam zadáš " %c" (s mezerou).
Ja som vždy používal odstránenie znaku ENTER:
scanf("%f", &r);
while (getchar() != '\n') ; // odstranenie enter
printf("Pro vypocitani objemu zadej v a obsahu s: ");
scanf("%c", &vyber);
ale Davidov spôsob sa mi zadá jednoduchší a pokiaľ to nemá nejaké
vedľajšie účinky, bude asi najlepší zo všetkých tu uvedených.
Môže niekto skúsenejší vybrať, ktoré s tých troch možností je najsprávnejšia?
scanf("%f", &r);
//while (getchar() != '\n') ; // odstranenie enter
//fflush(stdin); // vyprázdnenie buferu
printf("Pro vypocitani objemu zadej v a obsahu s: ");
scanf(" %c", &vyber); // medzera pred %c
Zobrazeno 8 zpráv z 8.