Ezen C++ do-while példájának ebben az utasításában: hiba = hiba || tmp. Size ()! =0 || n<0; miért szerepel a tmp. Size ()! =0 kifejezés? Van olyan eset, amikor a cin. Fail () false-t ad vissza, de mégis van valami az input bufferben?
int n;
bool hiba = false;
do{
cout << "Adjon meg egy pozitív egész számot ";
cin >> n;
hiba = cin.fail();
if(hiba) cin.clear();
string tmp; getline(cin,tmp,'\n');
hiba = hiba || tmp.size()!=0 || n<0;
if(hiba) cout << "Hibás adat!" << endl;
}while(hiba);
A példa ennek a dokumentumnak a hatodik oldaláról származik (bár ha minden igaz, ott van benne egy fölösleges kapcsos zárójel).
A példának egyébként az a lényege, hogy addig kér be a felhasználótól egy értéket, amíg a felhasználó nem pozitív vagy 0-t ad meg. És kezeli azt is, ha nem szám értéket ad meg a felhasználó (ekkor ad true értéket a cin.fail() tagfüggvény.
Az input buffert azért kell manuálisan üríteni, mert különben végtelen ciklusba keveredne a program, ha a felhasználó nem szám típusú értéket (pl. szöveget) adna meg a bekéréskor.
"Van olyan eset, amikor a cin. Fail () false-t ad vissza, de mégis van valami az input bufferben?"
Van olyan eset, amikor nem?
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!