C++ Jak ošetřit příliš dlouhý řetězec od uživatele?

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
kybrex
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. dub 2006
Bydliště: V sudu... (plnej samozřejmě)
Kontaktovat uživatele:

C++ Jak ošetřit příliš dlouhý řetězec od uživatele?

Příspěvek 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

CPU: Intel Pentium (Prescott) 2,8GHz / 800MHz cache L1 16kB, L2 1MB; + CoolerMaster S9U1 Hyper TX MotherBoard: ASUS P5GD1PRO Intel 915P PCI-Express, GPU: ATI Radeon X700PRO 425MHz 128MB GDDR3 (860MHz), RAM: 2x256MB + 2x512MB 400MHz, HDD: Western Digital Caviar 320GB cache 16MB + Western Digital 1000GB 16MB cache, DVD mechanika: LG HL-DT-ST DVDRAM GSA-4082B writing: 8x DVD-R/+R, 4x DVD+RW/-RW, 3x DVD-RAM, 24x CD-R, 16x CD-RW reading: 12x DVD, 10x DVD-RW/+RW, 3x DVD-RAM, 32x CD. LCD: 19" AG Neovo F-419, CRT: 17" ADI Microscan M700, REPRO: Eltax concept 400 + Omnitronic P-250

NOTEBOOK:
Hewlett Packard 550 :: CPU: C2D T5270 @1,4GHz L2 Cache 2MB, FSB 800MHz, RAM: 2+2 GB DDR2 667 MHz, Chipset: Intel GME965, HDD: 160 GB 5400 RPM Serial ATA, DVD±RW, Komunikace: Modem 56 Kbit/s, 10/100 Mbit/s LAN Ethernet Controller, Wireless LAN 802.11a/b/g, BlueTooth
WoiTa
Mírně pokročilý
Mírně pokročilý
Uživatelský avatar
Registrován: 07. říj 2004
Bydliště: Chrudim, Brno
Kontaktovat uživatele:

Příspěvek 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
kybrex
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. dub 2006
Bydliště: V sudu... (plnej samozřejmě)
Kontaktovat uživatele:

Příspěvek 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.

CPU: Intel Pentium (Prescott) 2,8GHz / 800MHz cache L1 16kB, L2 1MB; + CoolerMaster S9U1 Hyper TX MotherBoard: ASUS P5GD1PRO Intel 915P PCI-Express, GPU: ATI Radeon X700PRO 425MHz 128MB GDDR3 (860MHz), RAM: 2x256MB + 2x512MB 400MHz, HDD: Western Digital Caviar 320GB cache 16MB + Western Digital 1000GB 16MB cache, DVD mechanika: LG HL-DT-ST DVDRAM GSA-4082B writing: 8x DVD-R/+R, 4x DVD+RW/-RW, 3x DVD-RAM, 24x CD-R, 16x CD-RW reading: 12x DVD, 10x DVD-RW/+RW, 3x DVD-RAM, 32x CD. LCD: 19" AG Neovo F-419, CRT: 17" ADI Microscan M700, REPRO: Eltax concept 400 + Omnitronic P-250

NOTEBOOK:
Hewlett Packard 550 :: CPU: C2D T5270 @1,4GHz L2 Cache 2MB, FSB 800MHz, RAM: 2+2 GB DDR2 667 MHz, Chipset: Intel GME965, HDD: 160 GB 5400 RPM Serial ATA, DVD±RW, Komunikace: Modem 56 Kbit/s, 10/100 Mbit/s LAN Ethernet Controller, Wireless LAN 802.11a/b/g, BlueTooth
mhl
Středně pokročilý
Středně pokročilý
Registrován: 17. úno 2004
Bydliště: Brno

Příspěvek od mhl »

tohle by mělo fungovat

Kód: Vybrat vše

int c;
while((c = getc()) != '\n' && c != EOF)
   ;
kybrex
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. dub 2006
Bydliště: V sudu... (plnej samozřejmě)
Kontaktovat uživatele:

Příspěvek 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();
}

CPU: Intel Pentium (Prescott) 2,8GHz / 800MHz cache L1 16kB, L2 1MB; + CoolerMaster S9U1 Hyper TX MotherBoard: ASUS P5GD1PRO Intel 915P PCI-Express, GPU: ATI Radeon X700PRO 425MHz 128MB GDDR3 (860MHz), RAM: 2x256MB + 2x512MB 400MHz, HDD: Western Digital Caviar 320GB cache 16MB + Western Digital 1000GB 16MB cache, DVD mechanika: LG HL-DT-ST DVDRAM GSA-4082B writing: 8x DVD-R/+R, 4x DVD+RW/-RW, 3x DVD-RAM, 24x CD-R, 16x CD-RW reading: 12x DVD, 10x DVD-RW/+RW, 3x DVD-RAM, 32x CD. LCD: 19" AG Neovo F-419, CRT: 17" ADI Microscan M700, REPRO: Eltax concept 400 + Omnitronic P-250

NOTEBOOK:
Hewlett Packard 550 :: CPU: C2D T5270 @1,4GHz L2 Cache 2MB, FSB 800MHz, RAM: 2+2 GB DDR2 667 MHz, Chipset: Intel GME965, HDD: 160 GB 5400 RPM Serial ATA, DVD±RW, Komunikace: Modem 56 Kbit/s, 10/100 Mbit/s LAN Ethernet Controller, Wireless LAN 802.11a/b/g, BlueTooth
Odpovědět

Zpět na „Programování a web“