Diskuze: Rozlišení čísel a písmen
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= 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.
Tak jeden znak se dá vrátit do bufferu pomocí ungetc.
Ale nechápu, k čemu scanf?? Bych to udělal tak, že budeš načítat znaky, vždy si budeš pamatovat jeden posledně načtený znak (ten budeš v případě čísla opakovat). Když narazíš na číslo (makro isdigit() z ctype.h), tak je začneš sázet do nějakého pole znaků. Když pak narazíš znovu na znak, tak to pole znaků zkonvertuješ na číslo (např. pomocí atoi - kontrola není třeba - v poli máš jen číslice) a uděláš for cyklus, který tolikrát vypíše (putchar()) ten poslední zapamatovaný znak..
Díky za radu, ta funkce ungetc mi vyřešila můj problém.
scanf tam mam proto, že mi pak načte rovnou celé číslo. Kdyby tam bylo 143546, tak ať to nečte po znaku, ale načte to rovnou najednou. Nemusím pak případně volat funkce na převod. Přijde mi, že mi to ušetří čas i paměť. Takhle mi stačí 1 pole.
až na to, že scanf je náročnější než to načíst po znacích a převést..
Obecně.. scanf je jedna z největších prasáren v C.. Jelikož ten vstup různě parsuje a musí podporovat všechny možné a nemožné formáty, tak je to opravdu "parní mlátička" a pokud ti jde o efektivitu, tak rozhodně nepoužívat
Zobrazeno 4 zpráv z 4.