Daten auslesen
-
@ David_pb: entschuldige, natürlich lese ich mit ifstream und schreibe mit ofstream. Habe ja geschrieben dass ich reichlich verwirrt bin!
case 'l': case 'L': { int n_Eingabe; // Prozentschlüssel laden do { clrscr(); Menue_Prozentschluessel(); // Ausgabe der Menüüberschrift gotoxy(47, 3); cout << "Prozentschluessel laden"; // Dateiname abfrage gotoxy(43, 7); cout << "Dateiname: "; gotoxy(54, 7); cin.ignore(); cin.get(c_Dateiname, 9); // Schlüssel laden // ifstream-Objekt erstellen um datei zu lesen ifstream Prozentschluessel(c_Dateiname); for(int i = 0; i <= 5; i++) { Prozentschluessel.read((char*) &n_von[i], sizeof(n_von[i])); } for(int j = 0; j <= 5; j++) { Prozentschluessel.read((char*) &n_bis[j], sizeof(n_bis[j])); } // Datei schließen Prozentschluessel.close(); // Eingabe-Matrize für den Prozentschlüssel Schluessel_Matrize(44, 10); // Werte ausgeben for(int i = 0; i < 6; i++) { cout << n_von[i]; cout << n_bis[i]; } getch(); // Beenden n_Eingabe = 3; }while(n_Eingabe != 3);So, habe jetzt mal den kram zusammenkopiert! Hoffe das ihr mir damit helfen könnt!
-
Speicherst du Binär und was für Typen haben n_von und n_bis?
-
Ich hatte binär gespeichert, habe dies bloß mal zur Probe rausgenommen, da ich gelesen habe das man dadurch ne normale Textdatei erzeut (Hat bei mir aber nicht Funktioniert
) n_von und n_bis sind die beiden Arrays vom Typ int!
-
Schmeiß mal den Debugger an und schau was read zurückgibt!
-
Hi,
ich habe keinen Debugger, ich benutze den freeware compiler von Borland.
Ich habe jetzt so noch mal etwas experimentiert. Ich habe nach der ersten for-schleife einfach mal ein goto (nicht schlagen, sonst mache ich sowas nicht) vor die abfrage des Dateinamen gesetzt. starte ich das ganze jetzt, passiert wieder das gleiche! 1. Aufruf --> keine Werte enthalten,
nach goto 2. Aufruf --> Werte aus der Daitei gelesen und in die Variablen geschrieben.do { clrscr(); Menue_Prozentschluessel(); // Ausgabe der Menüüberschrift gotoxy(47, 3); cout << "Prozentschluessel laden"; // TEST GOTO test: // Dateiname abfrage gotoxy(43, 7); cout << "Dateiname: "; gotoxy(54, 7); cin.ignore(); cin.get(c_Dateiname, 9); // Schlüssel laden // ifstream-Objekt erstellen um datei zu lesen ifstream Prozentschluessel(c_Dateiname); for(int i = 0; i <= 5; i++) { Prozentschluessel.read((char*) &n_von[i], sizeof(n_von[i])); } // TEST-GOTO goto test; for(int j = 0; j <= 5; j++) { Prozentschluessel.read((char*) &n_bis[j], sizeof(n_bis[j])); } // Datei schließen Prozentschluessel.close(); // Eingabe-Matrize für den Prozentschlüssel Schluessel_Matrize(44, 10); // Werte ausgeben for(int i = 0; i < 6; i++) { cout << n_von[i]; cout << n_bis[i]; } getch(); // Beenden n_Eingabe = 3; }while(n_Eingabe != 3);Setzte ich jetzt die Sprungmarke aber so das ich den Dateinamen nicht nochmal eingeben muss (also einfach vor das ifstream) werden auch beim 2. Durchlauf keine Werte geladen!
Also, damit die Daten geladen werden muss ich den Dateinamen 2mal eingeben!
Ich weiß mir einfach keinen Rat mehr! Könnte es sein dass bei der Abfrage des Dateinamen etwas schiefgeht?2. Frage: Hatte ja schon mal angedeutet dass ich auch keine Textdateien erstellen kann. Ich muss doch einfach das ios::binary weglassen damit eine Textdatei erstellt wird, oder? Wenn das zutrifft funktioniert das nicht bei mir!
-
Hallo,
Teste das mal
gotoxy(54, 7); cin.ignore(); cin.get(c_Dateiname, 9); c_Dateiname[9] = '\0'; // Schlüssel laden // ifstream-Objekt erstellen um datei zu lesen ifstream Prozentschluessel(c_Dateiname); if( !Prozentschluessel.is_open()) cout << "Datei konnte nicht geöffnet werden!" << endl; else { for(int i = 0; i <= 5; i++) { Prozentschluessel.read((char*) &n_von[i], sizeof(n_von[i])); } for(int j = 0; j <= 5; j++) { Prozentschluessel.read((char*) &n_bis[j], sizeof(n_bis[j])); } }Zeig bitte mal die Deklarationen von n_bis, n_von und c_Dateiname.
zu 2.
Kann es sein das du immer mit write rausschreibst? write schreibt grundsätzlich binär. Für Textausgaben nimmt man die Streamoperatoren (wie bei cout).
-
Habe nochmal etwas experimentiert. Ich habe jetzt einfach mal den eingegebenen Dateinamen direkt danach wieder ausgegeben. (cout << c_Dateiname;)
Jetzt die Überraschung: der erste Buchstabe wird abgeschnitten oder wurde nicht gespeichert. bsp.: Eingabe : "Test" Ausgabe: "est". Da ist es ja kein Wunder das die Daten nicht geschrieben werden. Wenn ich jetzt einfach nochmal einen Dateinamen eingebe wird er korrekt abgespeichert und ausgegeben. Also kann der Fehler nur bei cin.get(c_Dateiname, 9); liegen.
Ich habe auch nochmal per strcpy(); einfach einen Teststring in c_Dateiname kopiert, da hat es dann auch einwandfrei funktioniert.char c_Dateiname[]; int n_von[6] = {0}; int n_bis[6] = {0};2: Danke, das stand in meiner Referenz so drin, deshalb war ich total verwirrt warum das nicht funktioniert hat! Habe das jetzt noch nicht ausprobiert, aber so müsste das doch funktionieren, oder?
prozentschluessel.cout << "Test";
-
*push*
-
Hat denn keiner ´ne Lösung für mein Problem! Kann es sein dass ich mit cin.get irgendeinen Fehler mache? Ist doch komisch das der immer bei der ersten verwendung den ersten Buchstaben abschneidet.
-
Wieso, Du ignoreierst ihn doch mit voller Absicht.
-
ich habe das ignore jetzt davor mal weggelassen und jetzt funktioniert es! In einem Buch von mir stand halt drin dass man ignore benuten muss um den Lesezeigen auf den Startpunkt zu setzten. War scheinbar falsch. Aber was bewirkt das ignore denn dann jetzt genau? Und wann muss ich es benutzen?
-
