Frage

Egal, was ich versuche, ich kann den folgenden Code an der Arbeit richtig bekommen.

ifstream inFile;
inFile.open("sampleplanet");
cout << (inFile.good()); //prints a 1
int levelLW = 0;
int numLevels = 0;
inFile >> levelLW >> numLevels;
cout << (inFile.good()); //prints a 0

an der ersten cout << (inFile.good ()) ;, es druckt eine 1 und bei der zweiten eine 0 Welche mir sagt, dass die Datei korrekt öffnet, aber inFile versagt, sobald in von ihm gelesen . Die Datei hat mehr als genug Zeilen / Zeichen, so wird es keine Möglichkeit, die ich versucht habe von diesem Punkt über das Ende der Datei zu lesen.

Datei-Inhalt:

8
2
#level 2
XXXXXXXX
X......X
X..X..XX
X.X....X
X..XX..X
XXXX...X
X...T..X
XXX..XXX
#level 1
XXXXXXXX
X......X
X..X.XXX
X.X..X.X
X..XX..X
X......X
X^....SX
XXX.^XXX
War es hilfreich?

Lösung 2

Es stellte sich heraus ein Problem mit X-Code. Ich habe ein Projekt in Netto-Bohnen exakt das gleiche Code verwendet und hatte keine Probleme. Schräge.

Update: In meinem X-Projekt-Code, änderte ich meine aktive SDK von Mac OS 10.6 auf Mac OS 10.5 und alles funktioniert jetzt.

Andere Tipps

Es ist ein bekanntes Problem. Von Xcode 3.2.1 die Release Notes :

  

Der Standard-gcc 4.2-Compiler ist nicht   kompatibel mit dem Standard-C ++   Bibliothek Debug-Modus. C ++ Programme   mit Xcode kompiliert 3.2 möglicherweise nicht   in der Debug-Konfiguration. Reparieren   dazu die Compiler Version 4.0 auf,   oder bearbeiten Sie die Debug-Konfiguration des   Präprozessormakros und entfernen Sie die   Einträge:
  _GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

I reproduziert und getestet Code und Datei und meine Ausgabe war 11 und beide levelLW und numLevels wurden wie erwartet. Ich würde auf jeden Fall einen harten Blick auf versteckte Zeichen in der Datei (oder deren Fehlen). Ich mag Notepad ++ verwenden mit „Zeigen alle Zeichen“ aktiviert. Meine Datei ist genau das, was Sie mit einem Wagenrücklauf und einem Zeilenvorschub am Ende jeder Zeile geschrieben.

Du hast gesagt, die erste inFile.good () druckt 1. dass die Datei geöffnet OK bedeuten sollte. Da Sie sagt: „Es funktioniert durch das Terminal aber nicht XCode“ in tehMick Post - für das, was es wert ist - wenn ich das getestet, ich in das folgende Problem lautete: meine IDE (C ++ Builder) läuft das Programm aus einem debug (wenn Sie in der Debug-Modus). Ich musste Platz „sampleplanet“ im DEBUG-Verzeichnis oder einen Pfad im Freien verwenden, dass die Datei wie „.. \\ sampleplanet“ gefunden.

+MyProjectDirectory
|  mymain.cpp (Even though this is where I had the source file..)
|  sampleplanet
+--DebugDirectory
     mymain.obj
     mymain.exe (the program runs out of this directory.)

Nachdem ich kümmerte sich um die oben genannten Problem alles funktionierte wie erwartet den obigen Code und Datei. Ich habe die Datei in Notepadd ++ die [CR] [LF] nach jeder Zeile zu bestätigen. Wenn Sie die Datei in Linux erstellen, kann es nur [LF] aber (ich habe alles unter Windows).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top