[C++] cin.getline(char, SIZE) - problem

Permalänk

[C++] cin.getline(char, SIZE) - problem

Har ett problem med ett litet konsoll-program som ska ta emot förnamn och efternamn från användaren.

Anledningen till att jag inte bara använder strängar och cin istället är att både förnamn och efternamn ska kunna ha mellanslag i sig, och cin kan inte hantera det.

Jag har alltså följande kod:

const int SIZE = 40; char ch_Fornamn[SIZE] = ""; char ch_Efternamn[SIZE] = ""; cout << "Skriv in förnamn: "; cin.getline(ch_Fornamn, SIZE); cout << "Skriv in efternamn: "; cin.getline(ch_Efternamn, SIZE);

Problemet är att programmet hoppar direkt till sista cin.getline() istället för att låta mig mata in förnamnet först. Hur löser jag det?

Visa signatur

Bro!

Permalänk

cin.ignore(); funkade jättebra - den tar vi Annars var det andra exemplet bra också, men det blir för framtida referens.
Tackar för hjälpen

Visa signatur

Bro!

Permalänk
Medlem

Mitt exempel var inte bra alls, det var därför jag tog bort det. Jag kom på ett bättre, men det är nog bäst att låta de som faktiskt kan C++ hjälpa folk med C++...

Permalänk

cin.ignore() hjälpte iaf bra

Visa signatur

Bro!

Permalänk
Medlem

Istället för char-array kan du använda string, om du använder den globala getline.

string fornamn; getline(cin, fornamn);

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem

Har man getline behöver man inte cin.ignore. Används bara när man har cin och cin.get då värden blir över i bufferten.

Visa signatur

ATX: Intel Core i5 4690k | Asus Z97-A | MSI R9 390 8GB | 2x Corsair DDR3 2133Mhz | Crucial BX480Gb | Corsair TX650W | Fractal Design Define R4
mITX: Intel Core i3 6100 | Asus B150I | 2x8Gb Corsair DDR4 2133Mhz | Samsung 850 Evo 500GB | Cooler Master V750 | Fractal Design Define Nano S

Permalänk

Jag använder ju cin i övriga funktioner då jag inte behöver ta hänsyn till ex. mellanslag. I mitt lilla menysystem som tar mig till denna funktion så är det cin som gäller.

Jag antar att jag borde byta helt till cin.getline i hela koden, så slipper jag tänka på buffert-overflow...

lajnold: Det passar ännu bättre, eftersom det ändå är en sträng jag ska lagra allt i sedan (konverterar ju char-variablerna till en string)

Visa signatur

Bro!