Stránka 1 z 1
C++ Jak ošetřit příliš dlouhý řetězec od uživatele?
Napsal: čtv 29. kvě 2008, 11:24
od kybrex
Nevím, jak bych ošetřil zadání příliš dlouhého řetězce. Se zadáváním písmen místo čísel jsem si už poradil. Nechám si to vložit jako řetězec (pole znaků) a pak jsem si udělal funkci pro převod na číslo přes ASCII hodnoty. Ale když zkusím schválně zadat tam, kde program očekává třeba 4 znaky, znaků 5 a víc, tak se program dokončí a vypne, přestože pak v cyklu je ještě několikrát požadavek na vstup od uživatele (používám cin.getline(char *,int delka); ) a nenapadá mě, jak vyřešit případ, kdy uživatel zadá laicky řečeno moc písmenek, třeba schválně, že zkouší, co můj program vydrží.

Napsal: čtv 29. kvě 2008, 12:02
od WoiTa
načítej znaky třeba funkcí scanf()
scanf("%5s",retezec);
cislo za procentem ti definuje max pocet znaku co se ulozi do retezce, ostatni znaky to ignoruje
Napsal: sob 31. kvě 2008, 19:17
od kybrex
Ahoj, funguje to pěkně, ale nešlo by ještě nějak udělat, aby ostatní znaky, který ořízne úplně zahodil? On je totiž načte v následujícím cyklu na vstup a provede na základě toho další operace.
Napsal: sob 31. kvě 2008, 21:45
od mhl
tohle by mělo fungovat
Kód: Vybrat vše
int c;
while((c = getc()) != '\n' && c != EOF)
;
Napsal: sob 31. kvě 2008, 22:41
od kybrex
Díky moc. Výbornej nápad. Jen pro úplnost posílám svojí úpravu. Místo getc jsem dal getchar() protože getc chtěla parametr, ale šlo o nápad a ten byl fakt supr. Ještě jednou díky.
Kód: Vybrat vše
char * optionInput=new char [3];
fgets(optionInput, 2, stdin);
option=charToInt(optionInput[0]);
char tmp;
while((tmp != '\n') && (tmp != EOF))
{
tmp=getchar();
}