Adatbeviteli probléma C++ esetében

 ( pelz | 2008. január 18., péntek - 10:18 )

Sziasztok!

Nincs még nagy tapasztalatom a c++ nyelvben, ezért aztán beleütköztem
egy adatbekérési problémába.
Tekintsük a következő kis programrészletet:

string s;
int i;

cin >> i;
getline(cin, s);

A gond a következő: A program futtatásakor az történik, hogy az 'i'
bevitele után már nem kéri 's'-et, mert az egész után ütött ENTER
átadódik a 'getline'-nak, és így az 's'-be nem kerül semmi.

A problémát úgy oldottam meg, hogy kétszer írtam le a 'getline'
sorát. Az első elnyeli az előző ENTER-t, a második pedig ténylegesen
bekéri a 's'-t.

Arra kérek tanácsot, hogy lehet ezt korrektebbül megoldani?
Gondoltam arra, hogy 'i' helyett szintén egy egy stringet kérek be,
és azt konvertálom egésszé. Hogy lehet ezt megoldani?
Vagy nan jobb ötletetek?

Előre is kösz! Pelci.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Gondoltam arra, hogy 'i' helyett szintén egy egy stringet kérek be, és azt konvertálom egésszé.
Szerintem is. Szvsz minden formazott/vegyes inputot es/vagy ahol nagyon bolondbiztossa'gra kell menni (tehat minden ami nem sajat tesztprogram), erdemes tisztan sztringkent beolvasni es utana maga't a sztringet parzolni okosan, a nyelvnek megfeleloen (C-ben strtok(), egyeb tokenizalas, sscanf(), C++-ban gondolom van string istream tipus, es ha ahhoz tartozik >> operator, akkor azzal).

A.

Igen, stringként beolvasni, utána konvertálni.
http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.2

Köszönöm a tanácsokat!

Szerintem, most már menni fog.
Különösen hasznos volt a link a FAQ-ra.

Üdv: Pelci