Zdravím,
když použiju v konzolové aplikaci int a; cin >> a; a uživatel zadá písmenko, tak jsem chybu detekoval pomocí metody cin.fail() resp. !cin.good() a v příslušné podmínce provedl cin.clear() ale i přesto se mi další požadavky na vstup v případě této chyby ignorují, a program doběhne do konce/spadne. Jak zařídit, abych std::cin dostal do původního stavu a mohl ho dále použít pro načtení hodnot?
Toto se mi zacyklí právě kvůli následnému přeskočení požadavku na vstup
int a;
cout << "zadej cislo:";
cin >> a;
while(cin.fail())
{
cin.clear();
cin >> a;
}
Předem díky za nápady.
C/C++ ošetření vstupu
- kybrex
- Začátečník

- Registrován: 16. dub 2006
- Bydliště: V sudu... (plnej samozřejmě)
- Kontaktovat uživatele:
C/C++ ošetření vstupu
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
- kybrex
- Začátečník

- Registrován: 16. dub 2006
- Bydliště: V sudu... (plnej samozřejmě)
- Kontaktovat uživatele:
Re: C/C++ ošetření vstupu
Vyřešeno.
Zapoměl jsem na cin.ignore(...); - je třeba přeskočit chybná data na vstupu, jinak se budou chtít načíst znovu a zacyklí se to.
Zapoměl jsem na cin.ignore(...); - je třeba přeskočit chybná data na vstupu, jinak se budou chtít načíst znovu a zacyklí se to.
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