Problem mit einlesen einer Textdatei mit Zahlen
-
renske96 schrieb:
er schießt mir eine Fehlermeldung aus (Windows): lesen.exe funktioniert nicht mehr...
etwas ist im Code falsch...
Wo, wie, was

-
out schrieb:
renske96 schrieb:
er schießt mir eine Fehlermeldung aus (Windows): lesen.exe funktioniert nicht mehr...
etwas ist im Code falsch...
Wo, wie, was

Das wird wohl an der Ausgabe von zahlen[0] liegen, obwohl dieses nicht existieren könnte. Wahrscheinlich wird die Datei gar nicht geöffnet.
-
Incocnito schrieb:
Die Datei test.txt liegt dann nicht im selben Verzeichnis wie dein Programm. Die Datei konnte also nicht geöffnet werden, der Stream wird aber trotzdem benutzt, daher der Absturz.
Mit Sicherheit liegt das nicht am Stream-Objekt. Dieses geht dann in einen Fehlerzustand über, falls die Datei nicht vorhanden ist, und die Leseoperationen werden einfach nicht ausgeführt. Wenn das Programm abkackt, dann liegt das an der Ausgabe
zahlen[0], weil imvectordann keine Elemente drin sind.
-
out schrieb:
Mit Sicherheit liegt das nicht am Stream-Objekt. Dieses geht dann in einen Fehlerzustand über, falls die Datei nicht vorhanden ist, und die Leseoperationen werden einfach nicht ausgeführt.
Achja, stimmt.
Irgendwie ein Designfehler, finde ich.
Ist ja quasi die "Kopf-in-den-Sand-steck" Methode.Edit: Ne, wenn man genauer drüber nachdenkt eher nicht. Der Wert einer Variable wird dabei ja nicht verändert und der Fehlerstatus wird gesetzt. Trotzdem, alles von Hand nachzuchecken nervt schon ein bisschen..
-
Also ich habe das Programm von Incocnito genommen und des cmd fenster "blitzt" auf und verschwindet, trotz getch(), system("PAUSE") oder ähnliches.
-
renske96 schrieb:
Also ich habe das Programm von Incocnito genommen und des cmd fenster "blitzt" auf und verschwindet, trotz getch(), system("PAUSE") oder ähnliches.
Klar, da ich bei der If-Abfrage direkt ein "return 0" eingebaut hab, was das Programm beendet, damit nicht mit der falschen Annahme weitergearbeitet werden kann, die Datei sei geöffnet. Da muss ja logischerweise auch was hin:
#include <fstream> #include <iostream> #include <vector> using namespace std; int main() { vector<int> zahlen; ifstream file("test.txt"); if(!file.is_open()) { std::cout << "Fehler beim Oeffnen der Datei!\n"; std::cin.get(); return 0; } for(int i; file>>i; zahlen.push_back(i)); cout << "Zahl 1:" << zahlen[0]; std::cin.get(); }
-
Incocnito schrieb:
Achja, stimmt.
Irgendwie ein Designfehler, finde ich.
Ist ja quasi die "Kopf-in-den-Sand-steck" Methode.Wieso Designfehler? Verstehe ich nicht. Du willst eine Datei öffnen, und das hat nicht funktioniert. Schlimm wäre es, wenn dich das Stream-Objekt nicht darauf aufmerksam machte und nicht in einen Fehlerzustand überginge...
-
out schrieb:
Incocnito schrieb:
Achja, stimmt.
Irgendwie ein Designfehler, finde ich.
Ist ja quasi die "Kopf-in-den-Sand-steck" Methode.Wieso Designfehler? Verstehe ich nicht. Du willst eine Datei öffnen, und das hat nicht funktioniert. Schlimm wäre es, wenn dich das Stream-Objekt nicht darauf aufmerksam machte und nicht in einen Fehlerzustand überginge...
Ja, hast recht. Ich finds nur nervig, so oft nachgucken zu müssen, ob der Fehlerstatus gesetzt ist. Bei boost::filesystem zb. wird direkt eine Exception geworfen, wenn ein Ordner nicht geöffnet werden konnte. Find ich persönlich ein bisschen einfacher, dann kann einem sowas wie hier gar nicht erst passieren.
-
~Edit: Geht halt nur nach Konstruktion.~
-
der sagt, dass der die datei nicht findet, obwohl sie im gleichen ordner ist. was mache ich falsch?
EDIT: Keine Idee mehr?
-
renske96 schrieb:
der sagt, dass der die datei nicht findet, obwohl sie im gleichen ordner ist. was mache ich falsch?
Im gleichen Ordener wie was? Sie muss im gleichen Ordner wie das .exe liegen. Oder gebe den absoluten Pfad der Datei an.
Gruß
Werner