Avatar billede mabz Nybegynder
28. marts 2004 - 21:59 Der er 7 kommentarer og
1 løsning

Problem med cin & string

Hej, endnu en nybegynder savner hjælp :)

Jeg håber der er nogen der kan hjælpe mig med dette "problem", nedenstående kode er klippet ud af et større prg, idet det er her jeg har problemmet, det er ikke selve koden jeg har problemmer med, men jeg er ny i C++ og undre mig over hvorfor jeg ikke kan få nedenstående til at virke.
//-----------------
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cout<<"Indtast 1.string : ";
    cin>>str;
    cout<<"1.string er : "<<str<<endl;
    string str2;
    cout<<"Indtast 2.string : ";
    getline(cin, str2);
    cout<<"2. string er : "<<str2<<endl;
    return 0;
}
//--------------------
Problemmet er i al sin enkethed at så snart jeg har indtastet noget i den første streng (str) hoppes der over min getline (str2), som om min "enter" efter 1.indtastning ligger i en buffer el.lign.
Mit output ser således ud når jeg eksekvere ovenstående kode :

Indtast 1.string : Test
1.string er : Test
Indtast 2.string : 2. string er :

Hvis man f.eks. skriver "Test forsøg" i "indtast 1.string :" får man flg. output :

Indtast 1.string : Test forsøg
1.string er : Test
Indtast 2.string : 2. string er :  forsøg

Jeg er klar over at cin kun indlæser til førstkommende " " (Space), men det virker som om resten af det indtastede står i en buffer og automatisk bliver "puttet" ind i 2.string (uden brugeren har nogen chance for indtastning)

Hvis jeg ændre koden, så der kun skal indtastes EN karakter (ændre "string str" til "char str")
int main()
{
    char str;
    cout<<"Indtast EN karakter : ";
    cin>>str;
    cout<<"Karakteren er : "<<str<<endl;
    string str2;
    cout<<"Indtast 2.string : ";
    getline(cin, str2);
    cout<<"2. string er : "<<str2<<endl;
    return 0;
}
får jeg samme resultat, Output :

Indtast EN karakter : a
Karakteren er : a
Indtast 2.string : 2. string er :

Igen bliver der "sprunget over" min "getline...."
Jeg håber der er nogen der kan gennemskue hvad jeg gør forkert, fordi jeg kan ikke ;-)
Jeg har brugt ovenstående kode i både Dev-c++ 4.01 & Dev-c++ 5 beta, med samme resultat.

På forhånd tak for svar ;-)
Avatar billede arne_v Ekspert
28. marts 2004 - 22:18 #1
Som hoved regel: aldrig bland forskellige typer input.

Enten bruger du >> elller så bruger du getline.

Alt andet giver problemer med bufre etc..
Avatar billede mabz Nybegynder
28. marts 2004 - 22:20 #2
Tak for hurtig respons Arne :)
Skal det forståes sådan at jeg skal bruge getline begge steder eller cin begge steder, altså holde mig til et "format" ?
Avatar billede arne_v Ekspert
28. marts 2004 - 22:23 #3
Jep.
Avatar billede arne_v Ekspert
28. marts 2004 - 22:24 #4
Hvis du har behov for at blande kan du som workaround læse en linie med getline og
så læse fra den string med >>.
Avatar billede mabz Nybegynder
28. marts 2004 - 23:10 #5
hvis det er den eneste mulighed så er det jo sådan det er :) Jeg troede egentlig der var en eller anden form for kommando til at "tømme" den buffer der åbenbart er på cin når man "blander", en form for flush eller clear el.lign.

Jeg takker for svar, ligger du et 'svar' så jeg kan tildele point ?
(det er min første post herinde, så jeg håber jeg har forstået instruktionerne korrekt ang. point konceptet :)
Avatar billede arne_v Ekspert
28. marts 2004 - 23:12 #6
svar
Avatar billede alsace Nybegynder
29. marts 2004 - 16:27 #7
Man kan godt flushe en buffer som du nævner. Enten med:

cout.flush(); // eller ved:
cout << flush;

og så er der selvf. altid fflush(stdin) hvis man er tilbage i noget C.

-Alsace
Avatar billede arne_v Ekspert
29. marts 2004 - 16:35 #8
Man kan sagtens flushe cout.

Men det er ikke det samme som at gøre noget ved cin <<'s interne buffer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester