XCode[C++] Ofstream ausgabe im Terminal

code bug

Mitglied
Thread Starter
Mitglied seit
27.04.2011
Beiträge
78
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:

Toobles

unregistriert
Mitglied seit
01.06.2007
Beiträge
216
Das Ganze bitte als Code formatiert und überarbeitet (auskommentierten Code löschen). Das kann ja keiner lesen.
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
Goto: Evil!
Auskommentierter Code: Evil!
Ungeprüfter Sprung in Array: Evil!

Mir wachsen graue Haare!
 

code bug

Mitglied
Thread Starter
Mitglied seit
27.04.2011
Beiträge
78
Hm

Okay goto ist vielleicht zu verbessern. Aber warum "Ungeprüfter Sprung in Array"?
 

code bug

Mitglied
Thread Starter
Mitglied seit
27.04.2011
Beiträge
78
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?
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
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.
 

code bug

Mitglied
Thread Starter
Mitglied seit
27.04.2011
Beiträge
78
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?
 

code bug

Mitglied
Thread Starter
Mitglied seit
27.04.2011
Beiträge
78
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?
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
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!
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
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.
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
ich meine:

Code:
for (int COUNTSTRING = 0; COUNTSTRING < 1000; COUNTSTRING++) {
// do something with INTEXT and COUNTSTRING...
}
 

code bug

Mitglied
Thread Starter
Mitglied seit
27.04.2011
Beiträge
78
Ja okay. Ist ja richtig. Allerdings sind wir jetzt völlig vom Thema abgekommen. Ich weiß nicht warum das per Terminal nicht funktioniert.
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
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...
 

redweasel

Aktives Mitglied
Mitglied seit
03.08.2010
Beiträge
2.201
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;
;)
 

_ebm_

Aktives Mitglied
Mitglied seit
19.01.2008
Beiträge
2.079
Ach ja: Existiert das Verzeichnis Debug im aktuellen Verzeichnis, wenn du das Programm startest?
 
Zuletzt bearbeitet:

Kaito

Aktives Mitglied
Mitglied seit
31.12.2005
Beiträge
7.012
Er hat nicht
auto_save ? false : true;
geschrieben, eine (harmlose) Negation sollte doch drin sein. :p
 
Oben