Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich schreib grad an einem ersten kleinen Programm für meine, Anfang der Woche angefangene FIAE Ausbildung ;) Aber so ganz will es grad nicht.

Folgenden Programmcode nutze ich:

ifstream * lesen = new ifstream("53967.JDF");

char text[100] = "";

*lesen >> text;

while (!(*lesen).eof()) {

    cout << text << endl;

    *lesen >> text;			

}

dies stürzt dann immer bei der Ausgabe der Datei ab. Gibt es irgendein Problem mit der Größe vielleicht? Verkleinere ich den Inhalt der Datei geht es. Die Datei enthält einfachen .xml Code und ist ~17kb groß.

Geschrieben

Hm..., falls du eine schnelle Lösung brauchst, dann benutz doch einfach einen String anstatt ein char Array. Funktioniert auch. Aber ich denke mal das weißt du auch, du möchtest es aber gerne mit dem char Array zum laufen bekommen oder?^^

Sobald man ein Array verwenden will, gibts nen Crash... Zeichen für Zeichen lässt sich problemlos einlesen und ausgeben. Böse Arrays.... hm....

Geschrieben

Nabend,

wie mein Vorredner bereits angesprochen hat, versuch mal folgendes


ifstream lesen = new ifstream("53967.JDF");

string text = "";


while (! lesen.eof()) {

    getline(lesen, text);

    cout << text << endl;	

}

Deine Pointeraritmethik war meine ich auch nicht ganz korrekt.

Pointer sind schon ne feine Sache, aber unter C++ benutze ich zumindest sie nur selten da ich ja "strings" hab.

Geschrieben

Werd ich nächste Woche oder so mal ausprobieren, danke für die Tipps. Strings sind sowieso besser, da ich im Endeffekt den Inhalt der Datei mit ner Vorgabe vergleichen will und das geht über Strings ja deutlich einfacher.

Scheint aber irgendwie an der Datei zu liegen, hab mal ne deutlich größere Datei (~160kb) versucht, da lief er problemlos durch, hab dann wieder auf die andere Datei gewechselt, da stürzte er wieder ab.

Geschrieben

kann auch daran liegen, dass die Datei möglicherweise UTF 16 ist , du aber ASCII (oder UTF-8:confused: :floet:)einliest, und dass da dann irgend n exitcode rauskommt.

ka, wäre aber nicht auszuschliessen würd ich ma so sagen (ohne gross nachzudenken, bin müde :hells:)

Geschrieben

@Iceman346

gut...

Mir fällt grad auf, dass ich eben mist gelaber hab, wenns mit strings geht *rofl*

Ja, ich hab grad meinen ersten Kaffee getrunken und meine erste kippe geraucht

und nein, ich bin nicht arbeitslos :-D Ich hab Urlaub :-P

Geschrieben
ifstream * lesen = new ifstream("53967.JDF");

char [COLOR="Red"]text[100][/COLOR] = "";

*lesen >> text;

while (!(*lesen).eof()) {

    cout << text << endl;

    *lesen >> text;			

}

dies stürzt dann immer bei der Ausgabe der Datei ab. Gibt es irgendein Problem mit der Größe vielleicht? Verkleinere ich den Inhalt der Datei geht es. Die Datei enthält einfachen .xml Code und ist ~17kb groß.

Das Programm stürzt ab, wenn mehr als 100 Zeichen in einer Zeile stehen. Mehr passt halt nicht ins Array.

Übrigens wird mit diesem Code die letzte Zeile nie ausgegeben, weil eof() erreicht ist.

Geschrieben
Das Programm stürzt ab, wenn mehr als 100 Zeichen in einer Zeile stehen. Mehr passt halt nicht ins Array.

*Geräusch einer Hand die auf die Stirn klatscht*

Da hätt ich auch selbst drauf kommen können ^^

Übrigens wird mit diesem Code die letzte Zeile nie ausgegeben, weil eof() erreicht ist.

Jo, hatte das mit der String Variante gemerkt und geändert. Im Endeffekt war der Aufwand aber erstmal sowieso nicht nötig, da das Programm momentan noch keine Dateien durchsuchen soll.

War ursprünglich als Programm geplant welches Dateien von einem FTP Server holt, nach bestimmten Markierungen schaut und diese aussortiert, aber erstmal reicht es wenn nur die Dateien kopiert werden und das klappt auch wunderbar.

Geschrieben
Ich habe es ausprobiert, wenn man ans Ende der letzten Zeile keinen Zeilenumbruch setzt, wird diese nicht ausgegeben.
Du hast Recht. Ich habe das mit dem Verhalten von feof verwechselt.

Bei Streams sollte man aber eigentlich immer den Stream selbst als Schleifenbedingung benutzen. Es gibt andere Dinge außer dem Dateiende, die einen Abbruch bewirken sollten. Wenn man nur auf EOF prüft, hat man dann schnell eine Endlosschleife. Also besser so:

    while (lesen >> text) {
cout << text << endl;
}[/code]

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...