Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.06.2007, 13:11

stringstreams und int

Ich will aus einem string mit stringstreams integer auslesen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
std::istringstream stream2("0, 1, 2");
int vals[3];
char c;
stream >> vals[0];
stream.get(c);
stream >> vals[1];
stream.get(c);
stream >> vals[2];
std::basic_ostringstream<wchar_t> stream3;
stream3 << vals[0] << L", " << vals[1] << L", " << vals[2];
WRITE_LOG_LN(stream3.str());


In stream2 ist der string gespeichert, der ausgelesen wird, im Array vals sollen die integer gespeichert werden und stream3 benutze ich für die Ausgabe der Werte ins Logbuch.
Leider ist die Ausgabe folgende:

Quellcode

1
2
3
56, 324913080, 281731048
56, 324915432, 281731048
56, 324917784, 281731048


Das komische ist, dass die Ausgabe bei einen Float-Array korrekt ist, beim Integer-Array aber nicht.

Weiß jemand, woran das liegen könnte?
Mein Projekt: Rise of the Sylvan

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

03.06.2007, 13:18

Muss mit den ',' im Ausgangsstring zusammenhängen... als erstes würde ich dir empfehlen, deinen stream2 nach jeder operation auf gültigkeit zu testen, es sieht bisschen so aus, als ob der nach dem ersten Einlesen einfach ein failbit setzt.

Hast du überhaupt schon den Debugger genutzt?

3

03.06.2007, 14:00

k also ich hab mit mal den Inhalt von stream2 nach jedem Auslesen angeguckt und es ist immer der Ausgangsstring "0, 1, 2".
Mein Projekt: Rise of the Sylvan

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

4

03.06.2007, 16:36

Sorry, aber das ist so ziemlich das nichtssagendste, was man zu diesem Thema rausfinden kann - was ist mit den anderen Variablen, was ist mit meiner Vermutung, dass der Stream ein failbit setzt,...?

5

03.06.2007, 21:40

Das failbit wird nicht gesetzt. Was aber seltsam ist, ist, dass der erste Wert richtig eingelesen wird. Der zweite hingegen nicht, und der erste wird überschrieben(!). Das heißt wenn ich nur den ersten Wert einlese, ist der eingelesene Wert richtig. Wenn ich aber auch noch den zweiten Wert einlese, sind beide Werte falsch.
Mein Projekt: Rise of the Sylvan

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

03.06.2007, 21:47

du debuggst nicht zufällig mit der release version?
bei mir funzt der code oben einwandfrei...

7

04.06.2007, 16:25

Du hattest recht, ich hab in der Release-Version debuggt. Ich hab's daraufhin in der Debug-Version laufen lassen, leider mit dem gleichen Problem. :cry:
Mein Projekt: Rise of the Sylvan

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

04.06.2007, 16:50

Dieser Code (deiner von Oben) läuft bei mir vollkommen korrekt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <sstream>

int main()
{
    std::istringstream stream2("0, 1, 2");
    int vals[3];
    char c;
    stream2 >> vals[0];
    stream2.get(c);
    stream2 >> vals[1];
    stream2.get(c);
    stream2 >> vals[2];
    std::basic_ostringstream<wchar_t> stream3;
    stream3 << vals[0] << L", " << vals[1] << L", " << vals[2];
    
    std::wcout << stream3.str() << std::endl;

    std::cin.get();
}
@D13_Dreinig

9

04.06.2007, 21:32

Oh das ist interessant. Bei mir läuft er nämlich nicht.
Ausgabe: -858993460, -858993460, -858993460

Dann scheint's an VC++ zu liegen. Ich benutze Microsoft Visual C++ 2005. Mit CodeBlocks funktioniert's übrigens.
Mein Projekt: Rise of the Sylvan

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

04.06.2007, 21:33

Zitat von »"Crash"«

Ich benutze Microsoft Visual C++ 2005


ich auch...

Werbeanzeige