Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » stringstream mit (Leer-)Zeichen am Ende

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.11.2007, 13:04 Uhr
Pler
Einer von Vielen
(Operator)


Hallo!

Ich lese eine Zeile mithilfe von stringstream aus. Nun ist es leider so, daß er den letzten Wert einer Zeile zweimal zurückgibt, wenn nach dem letzten Wert noch Leerzeichen sind.


C++:
while(in && !in.eof())
{
        std::getline(in, line);
        formater << line;
        while(!formater.eof())
        {
            double v;
            formater >> v;
            // Mach was mit v;
        }    
        formater.clear();
}



Eine Zeile sieht zum Beispiel so aus:

Code:
1       0.00000 1.11111 2.22222 3.33333 4.4444



Nun kann es aber sein, daß am Ende noch ein Leerzeichen oder so steht.
Im Beispiel würde dann 4.4444 zweimal zurückkommen.

Hat jmd. eine einfache Idee?

Dieser Post wurde am 18.11.2007 um 13:05 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.11.2007, 14:12 Uhr
0xdeadbeef
Gott
(Operator)



C++:
while(std::getline(in, line) {
  ...
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.11.2007, 15:45 Uhr
Pler
Einer von Vielen
(Operator)


Ach so..
Aber da liegt das Problem gar nicht. Sondern in der inneren while-Schleife. Ich bekomme also für jede Zeile einen Wert zuviel. (Den letzen doppelt).

formater hat also nach dem letzten Wert nur noch ein (paar) Leerzeichen drin. Deshalb gibt .eof() false zurück und die Schleife wird einmal zu oft durchlaufen. formater >> v liefert dann nochmal den alten Wert.

Dieser Post wurde am 18.11.2007 um 15:48 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.11.2007, 16:29 Uhr
0xdeadbeef
Gott
(Operator)



C++:
while(formater >> v) {
  ...
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.11.2007, 17:18 Uhr
Pler
Einer von Vielen
(Operator)


Funktioniert wunderbar.
Vielen Dank! :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.11.2007, 17:53 Uhr
xXx
Devil


Hmm eof wird nunmal erst gesetzt, wenn es 1x zu spät ist :P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.11.2007, 18:04 Uhr
Pler
Einer von Vielen
(Operator)


Ja genau. Ich wußte nur nicht, wie ich sozusagen rausbekomme, ob bald Schluß ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.11.2007, 22:35 Uhr
xXx
Devil


Hmm ... naja dazu gibt es ja die failbits und badbits ... und dann dazu passen den operator void* und operator! :P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: