/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
MYSTISK problem med <string> og getline
Fra : Flare


Dato : 07-06-02 23:45

Nu fik jeg læst mit problem med F1...Når har jeg et andet...

Hvorfor virker dette kode ikke når min bog siger det gør?

----
#include<string>
string s1;
getline(cin,s1);
cout << s1;
----
Problmet er at når jeg trykker enter for at gemme linien, er det som om der
kommer et nyt inouts felt...Jeg bliver altsp nød til at trykke enter igen.
Det er dog kune det fra det første "enter" der bliver gemt i s1. Nu har jeg
vendt og drejet dette, men jeg kan sgu ikke få det til at makke ret.

PFH
Tak Anders



 
 
Daniel Blankensteine~ (08-06-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 08-06-02 00:02

"Flare" <dct_flare@hotmail.com> wrote in message
news:3d013780$0$57411$edfadb0f@dspool01.news.tele.dk...
> Nu fik jeg læst mit problem med F1...Når har jeg et andet...
>
> Hvorfor virker dette kode ikke når min bog siger det gør?
>
> ----
> #include<string>
> string s1;
> getline(cin,s1);
> cout << s1;
> ----
> Problmet er at når jeg trykker enter for at gemme linien, er det som
om der
> kommer et nyt inouts felt...Jeg bliver altsp nød til at trykke enter
igen.
> Det er dog kune det fra det første "enter" der bliver gemt i s1. Nu
har jeg
> vendt og drejet dette, men jeg kan sgu ikke få det til at makke ret.

Hvis du gerne vil indtaste en streng, så prøv:
char buffer[30];
cin.getline(buffer, sizeof(buffer), '\n');

Den skulle gerne virke.

mvh
db



Flare (08-06-2002)
Kommentar
Fra : Flare


Dato : 08-06-02 00:59

> Hvis du gerne vil indtaste en streng, så prøv:
> char buffer[30];
> cin.getline(buffer, sizeof(buffer), '\n');

Jeg har brug for at bruge string a forskellige årsager så char* er ikke et
alternativ





Morten Brix Pedersen (08-06-2002)
Kommentar
Fra : Morten Brix Pedersen


Dato : 08-06-02 01:25

Daniel Blankensteiner wrote:
> Hvis du gerne vil indtaste en streng, så prøv:
> char buffer[30];
> cin.getline(buffer, sizeof(buffer), '\n');
>
> Den skulle gerne virke.

Det har samme funktion som det han prøvede på, bortset fra at
cin.getline() tager et character array og getline() alene tager std::string.

- Morten.


Daniel Blankensteine~ (08-06-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 08-06-02 10:15

"Morten Brix Pedersen" <morten@wtf.dk> wrote in message
news:3D014EC4.7040006@wtf.dk...
> Daniel Blankensteiner wrote:
> > Hvis du gerne vil indtaste en streng, så prøv:
> > char buffer[30];
> > cin.getline(buffer, sizeof(buffer), '\n');
> >
> > Den skulle gerne virke.
>
> Det har samme funktion som det han prøvede på, bortset fra at
> cin.getline() tager et character array og getline() alene tager
std::string.

Jamen var problem ikke at han skulle trykke enter to gange? Det skal han
da ikke her.
Men hvad er egentlig forskellen på en char* og en string?

mvh
db



Morten Boysen (08-06-2002)
Kommentar
Fra : Morten Boysen


Dato : 08-06-02 12:21

"Daniel Blankensteiner" <db@traceroute.dk> wrote in message
news:adshv7$kav$1@sunsite.dk...
> Men hvad er egentlig forskellen på en char* og en string?

std::string er en klasse, som er en del af ISO C++. Den styrer selv
hukommelsesallokeringen, og sørger dermed for, at den vokser, hvis der
ikke er plads nok. På den måde risikerer man ikke buffer-overflows.
Udover det, så er der overloadet en del af operatorerne for klasse, så
at man kan sammenligne std::string med ==, !=, > og <. Derudover kan
man konkatanere to std::string med + og +=. Der er ærlig talt ikke
rigtig nogen grund til at bruge char*. Hvis du er tvivl, om hvad du
skal bruge, så brug std::string. Det samme kan siges om std::vector i
forhold til f.eks. int-arrays. Arrays og pointers er roden til alt
ondt.


--
Morten Boysen


Daniel Blankensteine~ (08-06-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 08-06-02 12:26

"Morten Boysen" <morten.boysen@aub.dk> wrote in message
news:adspa3$d8f$1@sunsite.dk...
> "Daniel Blankensteiner" <db@traceroute.dk> wrote in message
> news:adshv7$kav$1@sunsite.dk...
> > Men hvad er egentlig forskellen på en char* og en string?
>
> std::string er en klasse, som er en del af ISO C++. Den styrer selv
> hukommelsesallokeringen, og sørger dermed for, at den vokser, hvis der
> ikke er plads nok. På den måde risikerer man ikke buffer-overflows.
> Udover det, så er der overloadet en del af operatorerne for klasse, så
> at man kan sammenligne std::string med ==, !=, > og <. Derudover kan
> man konkatanere to std::string med + og +=. Der er ærlig talt ikke
> rigtig nogen grund til at bruge char*. Hvis du er tvivl, om hvad du
> skal bruge, så brug std::string. Det samme kan siges om std::vector i
> forhold til f.eks. int-arrays. Arrays og pointers er roden til alt
> ondt.

Oki, takker*S*

mvh
db



Bertel Lund Hansen (08-06-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 08-06-02 13:05

Morten Boysen skrev:

>forhold til f.eks. int-arrays. Arrays og pointers er roden til alt
>ondt.

.... og til alt godt. Du vil bare gerne have dem camoufleret.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Ivan Johansen (08-06-2002)
Kommentar
Fra : Ivan Johansen


Dato : 08-06-02 17:10

Bertel Lund Hansen wrote:

> Morten Boysen skrev:
>>forhold til f.eks. int-arrays. Arrays og pointers er roden til alt
>>ondt.
> ... og til alt godt. Du vil bare gerne have dem camoufleret.


Som Scott Meyers siger:
POINTERS ARE YOUR ENEMIES because they lead to the kind of problems that
auto_ptr is designed to eliminate.
POINTERS ARE YOUR FRIENDS because operations on pointers can't throw.

Ivan Johansen




Morten Brix Pedersen (08-06-2002)
Kommentar
Fra : Morten Brix Pedersen


Dato : 08-06-02 01:24

Flare wrote:
> ----
> #include<string>
> string s1;
> getline(cin,s1);
> cout << s1;
> ----
> Problmet er at når jeg trykker enter for at gemme linien, er det som om der
> kommer et nyt inouts felt...Jeg bliver altsp nød til at trykke enter igen.
> Det er dog kune det fra det første "enter" der bliver gemt i s1. Nu har jeg
> vendt og drejet dette, men jeg kan sgu ikke få det til at makke ret.

Mener du at der ikke kommer en newline til sidst?


mbp/testcode$ ./getline
dette er en test
dette er en testmbp/testcode$
mbp/testcode$

Hvis det er det du mener, så må du jo bare udprinte en newline selv.

Hvis du vil ikke kun vil hente en linje kan du bruge while():

#include<string>
using namespace std;

int main()
{
string s1;
while (getline(cin, s1)) {
cout << s1 << endl;
}
}

- Morten.


Flare (08-06-2002)
Kommentar
Fra : Flare


Dato : 08-06-02 19:05

DET var satans. Jeg har fundet problemet. Det er sgu en bug i <string> i
Vc++ 6.0.

http://people.msoe.edu/~taylor/resources/msvc60.htm

Det løser problemet. Bare ikke helt i mit tilfælde. Jeg bruger mysql++ til
database adgang og når jeg tilføjer denne header kommer problemet tilbage.
Det er sgu noget være MØJ. Og det er ikke fordi mysql++ ændre i <string>
igen (heldigvis)

Anders



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste