C++ Jak ošetřit příliš dlouhý řetězec od uživatele?
- kybrex
- Začátečník

- 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?
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ží. 
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ý

- Registrován: 07. říj 2004
- Bydliště: Chrudim, Brno
- Kontaktovat uživatele:
- kybrex
- Začátečník

- Registrován: 16. dub 2006
- Bydliště: V sudu... (plnej samozřejmě)
- Kontaktovat uživatele:
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ý

-
- Registrován: 17. úno 2004
- Bydliště: Brno
tohle by mělo fungovat
Kód: Vybrat vše
int c;
while((c = getc()) != '\n' && c != EOF)
;- kybrex
- Začátečník

- Registrován: 16. dub 2006
- Bydliště: V sudu... (plnej samozřejmě)
- Kontaktovat uživatele:
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