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ží. :-D

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();
}