wie von datei in ein feld schreiben?
-
ich hab folgenden Code geschrieben
#include <iostream> #include <string> #include <fstream> using namespace std; int main() { int zahl; int feldgroesse; cout << "Geben Sie die Anzahl der Feldelemente an: " << endl; cin >> feldgroesse; int *feld = new int[feldgroesse]; /* for(int i=0; i< feldgroesse; i++) { cout << "Geben Sie eine Zahl ein: " << endl; cin >> zahl; feld[i] = zahl; }; for(int j=0; j<feldgroesse; j++) { cout << "Zahlausgabe: " << endl; cout << feld[j] << endl; }; */ ifstream datei ("test.txt"); char tmp[128]; for(int i=0; i<feldgroesse; i++) { while (!datei.eof()) { feld[i] << datei.getline(tmp,128); }; }; return 0; } Code: #include <iostream> #include <string> #include <fstream> using namespace std; int main() { int zahl; int feldgroesse; cout << "Geben Sie die Anzahl der Feldelemente an: " << endl; cin >> feldgroesse; int *feld = new int[feldgroesse]; /* for(int i=0; i< feldgroesse; i++) { cout << "Geben Sie eine Zahl ein: " << endl; cin >> zahl; feld[i] = zahl; }; for(int j=0; j<feldgroesse; j++) { cout << "Zahlausgabe: " << endl; cout << feld[j] << endl; }; */ ifstream datei ("test.txt"); char tmp[128]; for(int i=0; i<feldgroesse; i++) { while (!datei.eof()) { feld[i] << datei.getline(tmp,128); }; }; return 0; } Code: #include <iostream> #include <string> #include <fstream> using namespace std; int main() { int zahl; int feldgroesse; cout << "Geben Sie die Anzahl der Feldelemente an: " << endl; cin >> feldgroesse; int *feld = new int[feldgroesse]; /* for(int i=0; i< feldgroesse; i++) { cout << "Geben Sie eine Zahl ein: " << endl; cin >> zahl; feld[i] = zahl; }; for(int j=0; j<feldgroesse; j++) { cout << "Zahlausgabe: " << endl; cout << feld[j] << endl; }; */ ifstream datei ("test.txt"); char tmp[128]; for(int i=0; i<feldgroesse; i++) { while (!datei.eof()) { feld[i] << datei.getline(tmp,128); }; }; return 0; }
wieso kann er
ich habe die Suche benutzt und in den FAQ´s geschaut aber nix richtiges gefunden.
jetzt bei feld[i] << datei.getline(tmp,128);
den eingelesenen wert aus der Datei (sind alles zahlen aus einer txt datei) in das feld an der position i schreiben. Er bringt immer Fehlermeldungbinary '<<' : no global operator defined which takes type 'class std::basic_istream<char,struct std::char_traits<char> >' (or there is no acceptable conve
-
Hallo,
es steht da ja praktisch: Es wurde kein passender operator<< gefunden. Du würdest durch folgenden Code...
feld[i] << datei.getline(tmp,128);
...auch überhaupt keinen Sinn ergeben. Du speicherst den Inhalt der Datei (zumindest die ersten 128 Zeichen) in dem Feld "tmp". Allerdings sind das chars und keine ints. Du müsstest das in etwa so machen:
#include <cstdlib> ... while (datei.getline(tmp, feldgroesse)) { feld[i]=atoi(tmp); cout << feld[i] << endl; i++; };
Abgesehen davon ensteht ein Speicherloch, da du den Speicher...
int *feld = new int[feldgroesse];
...nicht mit delete[] löscht.
-
danke das hab ich jetzt gemacht und es hat funktionert. Nur eines ist mir noch aufgefallen, dass wenn ich jetzt als feldgröße z.b 2 eingebe dann bricht er ab. aber wenn ich z.b. 10 eingebe dann macht er alles korrekt.
an was kann das liegen?
-
jetzt habe ich mal den code modifiziert. jetzt sieht er so aus:
#include <iostream> #include <string> #include <fstream> using namespace std; int einlesen(ifstream eingabeDatei, int* feld, int anzahlFeldElemente) { int einFeldelemente; char tmp[128]; for(int i=0; i<anzahlFeldElemente; i++) { while (eingabeDatei.getline(tmp, anzahlFeldElemente)) { feld[i]=atoi(tmp); cout << "Feldinhalt an Position " << i << ": " << endl; cout << feld[i] << endl; i++; }; }; einFeldelemente = i; return einFeldelemente; }; int main() { int zahl; int anzahlFeldElemente; ifstream eingabeDatei("test.txt"); cout << "Geben Sie die Anzahl der Feldelemente an: " << endl; cin >> anzahlFeldElemente; int *feld = new int[anzahlFeldElemente]; einlesen(eingabeDatei, feld, anzahlFeldElemente); delete [] feld; return 0; }
wenn ich es nun ausführe dann funktioniert es eigentlich ganz gut nur das es am schluss der fehlerbericht von Windows aufgeht und wenn man auf nicht senden geht beendet sich das Programm völlig korrekt. Sieht jemand nen Fehler?
-
Hallo,
wenn du 10 Zahlen einlesen willst, aber als Feldgröße irgendwas <10 eingibst, führt das zwangsläufig zu Problemen. Ich habe mir deinen Code nicht genau angesehen, aber die Feldanzahl muss natürlich mindestens so groß sein, wie die Anzahl der Zeilen in der Datei.
EDIT: Ich würde dir einfach zu einem vector<int> raten, weil du da die Größe nicht angeben muss und mit solchen Problemen nicht zu kämpfen hast. Ferner würde ich dir auch raten, den ifstream per Reference zu übergeben, das ist performanter.