Kezdőoldal » Számítástechnika » Programozás » Mit csinál pontosan a cin....

Mit csinál pontosan a cin. Clear () ; utasítás?

Figyelt kérdés

Egy cin-es utasítás után, ha egy getline-os utasítást teszek, akkor a getline megkap egy input bufferből fennmaradó újsor karaktert (nem tudom, hogy a cin miért hagyja bent), viszont ha ürítem az input buffert, pl így:

while (cin.get() != '\n') {

continue;

}

Akkor nyugodtan elhelyezhetek egy cin-es és egy getline-os bekérést egymás után (tehát ha közéjük illesztem a fent említett kórdérszletet).

Viszont ha előzőleg az egyik cin-es bekérésnél érvénytelen értéket adok meg (pl szám bekérésénél karaktert, vagy karakter bekérésénél ékezetes karaktert), akkor az említett kódrészlet végtelen ciklust okoz, kivéve, ha szerepel előtte egy cin.clear();



#C++ #cin.clear(); #cin.get();
2016. máj. 24. 19:38
 1/6 anonim ***** válasza:

[link]

a ciklus helyett egyszerűbb lesz azt használni ami az elfogadott válaszban van

2016. máj. 24. 19:59
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Szófosás helyett nem lenne egyszerűbb ráguglizni?

[link]

2016. máj. 24. 20:01
Hasznos számodra ez a válasz?
 3/6 Piert ***** válasza:
Kiuriti a konzolinput pufferet. Mivel ha olvasas kozben hiba tortenik, az addig beolvasott adat benne marad a cin puffereben, igy egy kesobbi olvasasnal nemdefinialt viselkedeshez vezethet.
2016. máj. 25. 08:59
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:
Az input buffert a cin.ignore(10000,'\n'); vagy az általam említett ciklus üríti, nem? A cin.clear(); ezek szerint csak az error flaget törli. Bár igazából nem értem, hogy egy bekérés után a többi bekérés idejére miért marad bent az error flag. Pl. ha van 10 cin bekérés egy valamilyen szám típusú változóba, és az első bekérésnél beírok egy betűt, akkor az összes bekérést átugorja a program. (Egészen addig, amíg nincs cin.clear(); és input buffer ürítés.)
2016. máj. 25. 23:08
 5/6 anonim ***** válasza:
Azért marad bent, hogy feltűnjön, hogy valami nem okés.
2016. máj. 26. 16:01
Hasznos számodra ez a válasz?
 6/6 Adam23713 ***** válasza:

Ez így azért jobb:

cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

2016. máj. 27. 15:07
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!