Problem mit std::ifstream

S

Senator

Mitglied
Hi,

ich lerne gerade C++ und bin mitlerweile beim Filehandling angelangt:
Frei nach dem Buch "Practical C++" will ich bescheidene 10 Zahlen aus einer Datei in einen int Array einlesen.

Ich hab die schwierige Zeile mit einem Teufel markiert. Denn genau da scheint nichts zu passieren. Kein einziger Array Wert wird initialisiert. Alles andere funktioniert.

Warum funktioniert das nicht? Ich möchte keinen alternativen Code haben, sondern wissen, warum das nicht geht und wo der Fehler liegt.

#include <iostream>
#include <fstream>

int main(){
const int SIZE = 10;
int array[SIZE];
int counter;
std::ifstream datei("versuch.dat");

if(datei == 0){
std::cerr << "Datei konnte nicht geöffnet werden.";
exit(8 );
}

for(counter = 0; counter < SIZE; ++counter){
datei >> array[counter]; :devil:
std::cout << counter << ". " << array[counter] << "\n";
}
return(0);
}


PS.: Mit std::ofstream hab ich übrigens keine Probleme.
 
Der Code ist schon mal nicht falsch. Wie sieht denn die Datei aus, die du versuchst einzulesen?
Ich habe eine Datei mit zehn Zeilen genommen in der in jeder Zeile eine Zahl steht.
Das Programm läuft einwandfrei, die Ausgabe ist wie erwartet.
 
Du hast mich auf die richtige Spur gebracht. Vielen Dank. Ich war der Meinung, das die Datei Spaltenweise ausgelesen wird. Aber die wird ja zeilenweise ausgelesen :)

In meiner Datei standen also die Zahlen von 0-9 in der ersten Zeile. Und das sprengt bekanntlich den Bereich für int Werte :oldman

Jetzt läuft es wie geplant. Danke
 
Solange die Ziffern durch Leerzeichen getrennt sind, duerfte es keinen Unterschied machen. Sie werden nicht Zeilenweise eingelesen- in der Voreinstellung gilt 'white space' als Trennzeichen, und dazu gehoert das Leerzeichen ebenso wie der Zeilenumbruch.

Ich wuerde uebrigens mit "if(! datei.is_open())" testen, ob die Datei erfolgreich geoeffnet wurde, nicht mit 'if(datei == 0)'.
 

Ähnliche Themen

String auf Konsole ausgeben

dynamische Speicherreservierung

Rollei Mini Wifi Camcorder

Problem mit Texteingabe

deprecated conversion from string constant to ‘char*’

Zurück
Oben