XCode[C++] Ofstream ausgabe im Terminal

code bug

Mitglied
Thread Starter
Dabei seit
27.04.2011
Beiträge
78
Reaktionspunkte
1
Hi,
ich habe versucht eine Datei über Ofstream auszugeben. Das hat mit dem Xcode Debugger ganz gut funktioniert. Als ich aber die UNIX-Datei gestartet habe, wurde die Datei nicht erstellt. Woran liegt das?
CODE
------
http://pastebin.com/fkNsF2Pd

Danke schonmal cb
 
Zuletzt bearbeitet:
Das Ganze bitte als Code formatiert und überarbeitet (auskommentierten Code löschen). Das kann ja keiner lesen.
 
  • Gefällt mir
Reaktionen: redweasel
Goto: Evil!
Auskommentierter Code: Evil!
Ungeprüfter Sprung in Array: Evil!

Mir wachsen graue Haare!
 
Hm

Okay goto ist vielleicht zu verbessern. Aber warum "Ungeprüfter Sprung in Array"?
 
http://pastebin.com/wciDviXq
Allerdings schreibt man (außer beim coden) selten Text der länger als 1000 Zeilen lang ist.

PS: Sorry hatte das Zitat nicht gesehen...(Browser)

Gibt es nicht eine Funktion um ans ende einer Schleife zu springen?
 
http://pastebin.com/wciDviXq
Allerdings schreibt man (außer beim coden) selten Text der länger als 1000 Zeilen lang ist.
Das interessiert nicht! Du hast da einen klassischen Exploit ermöglicht! Wenn Du es dir nicht angewöhnst, immer zu checken, wird dir das auch an anderer Stelle passieren und das wäre fatal!

Gibt es nicht eine Funktion um ans ende einer Schleife zu springen?

Das willst du da nicht! Du willst in dem Fall nur um eines hochzählen und die Schleife wieder neu starten. (COUNTSTRING++; continue; ).

BTW. Es werden aus Konvention nur Konstanten komplett groß geschrieben.
 
Versteh mich nicht falsch. Ich will die Schleife nicht beenden sondern ZUM Ende springen. Außerdem: Wenn ich COUNTSTRING = 1000; erreicht habe, warum sollte ich dann COUNTSTRING++; schreiben? Dann wäre ich bei 1001, und das sollte vermieden werden...
An welcher Stelle prüfst du, ob du nicht über INTEXT[MAXSIZE] hinaus bist?
 
Versteh mich nicht falsch. Ich will die Schleife nicht beenden sondern ZUM Ende springen. Außerdem: Wenn ich COUNTSTRING = 1000; erreicht habe, warum sollte ich dann COUNTSTRING++; schreiben? Dann wäre ich bei 1001, und das sollte vermieden werden...
An welcher Stelle prüfst du, ob du nicht über INTEXT[MAXSIZE] hinaus bist?
 
Du willst die Schleife neu starten, denn dein GOTO-Marker führt nur das Increment durch und die Schleife startet neu.

Du führst, wenn du im CIN nicht gerade ein X siehst, immer den Increment durch, erreichst aber potentiell immer die 1001!
 
PS. wenn du nur 1000 mal durchlaufen lassen willst, wäre ein for(...;...;...) {} vielleicht besser als ein while(true) - welches auch sehr gefährlich ist. Dann sparst du dir dein Increment im Code.
 
ich meine:

Code:
for (int COUNTSTRING = 0; COUNTSTRING < 1000; COUNTSTRING++) {
// do something with INTEXT and COUNTSTRING...
}
 
Ja okay. Ist ja richtig. Allerdings sind wir jetzt völlig vom Thema abgekommen. Ich weiß nicht warum das per Terminal nicht funktioniert.
 
Du schließt den ofstream nicht, wenn Du mit 'x' beendest:

Code:
                if (INTEXT[COUNTSTRING]=="x") {
                        return 0;
                }

PS ein CTRL-D erzeugt einen Segmentation Fault...
 
Bei mir schreibt das Programm das File auch per Terminal, ich kann da keinen Unterschied erkennen. Was eigentlich auch "korrekt" ist, da der Stream geschlossen wird, wenn das Programm mit Exit Code 0 beendet. Sauber ist das allerdings wie erwähnt nicht gerade. :)

Bekommst du denn einen Fehler oder was passiert? Und wie rufst du das Programm auf?

PS:
Das hier:
Code:
if (save_auto==true) {
	save_auto=false;
} else if (save_auto==false) {
	save_auto=true;
}

geht auch eleganter mit:
Code:
save_auto=!save_auto;
;)
 
Ach ja: Existiert das Verzeichnis Debug im aktuellen Verzeichnis, wenn du das Programm startest?
 
Zuletzt bearbeitet:
Er hat nicht
auto_save ? false : true;
geschrieben, eine (harmlose) Negation sollte doch drin sein. :p
 
  • Gefällt mir
Reaktionen: redweasel
Zurück
Oben Unten