zweimal while(!datei.eof())
-
Hallo,
deine Schleifenbedingung while(!in.eof()) ist Käse. So liesst du immer ein Zeichen zuviel. Bedenke: Das eof-bit wird erst gesetzt, *nachdem* eof gelesen wurde.Besser:
char ch; while(in.get(ch)) { // mach was mit ch }
-
Original erstellt von HumeSikkins:
**Hallo,
deine Schleifenbedingung while(!in.eof()) ist Käse. So liesst du immer ein Zeichen zuviel. Bedenke: Das eof-bit wird erst gesetzt, *nachdem* eof gelesen wurde.Besser:
char ch; while(in.get(ch)) { // mach was mit ch }
**
Hab das mal so versucht wie du vorgeschlagen hast und leider beschwert sich
die Win darüber, dass eine Anweisung auf einen ungültigen Speicherbereich
zeige. Hier mal das gesamte Programm (ist nur ein Test für meine Übung):#include <iostream> #include <string> #include <fstream> using namespace std; void readFile(ifstream); int main() { ifstream in("test.txt"); readFile(in); return 0; } void readFile(ifstream in) { int i = 1; char ch; while(in.get(ch)) { cout << "[" << i << "]" << ch << "\n"; i++; } }
Wo könnte hier der Fehler liegen?
Danke im Voraus,
Khadgar
-
Wo könnte hier der Fehler liegen?
ifstream hat keinen Copy-Ctor. Das Programm dürfte sich eigentlich nicht mal übersetzen lassen.
Versuch's mal mit einer Referenzübergabe.
-
und dann in.Clone() aufrufen
-
Hallo,
ifstream in wird by value übergeben... nachdem die readFile ihre Gültigkeit
verliert, geht auch der ifstream out of scope und das FileHandle wird abgebaut!
In deiner main funktion gehst du dann auf ein ungültiges handle.Übergebe den stream als Reference dann klappt es problemlos.
Gruß
Frank
-
Idee: das ifstream objekt per referenz übergeben
gruß
-
Dank Euch!!
Referenzen und Pointer... tztztz. In Java geht das auch so schön ohne
Naja, muss jedoch nach 4 Wochen C++ schon sagen, dass C++ zumindest teilweise
toller ist
-
Kann ich irgendwie anzeigen lassen ob der Pointer am Anfang sitzt? (Von Dateien)
Weil irgendwie scheint es wieder nicht zu klappen
-
Hi,
in.tellg() liefert dir die aktuelle dateizeigerposition.
Gruß
Frank
-
Warum läuft dieses ********** while nur einmal durch, ich mach schon denn ganzen Tag rum
#include usw.. ifstream crypted("text.txt.crypt"); ofstream cracked("text.txt.cracked"); ... int fori; for(fori = 0;fori < 257; fori++) { cout << "Durchgang: " << fori << endl; while(crypted.get(ch)) { cout << "schreibe..." << endl; cracked << crypt(ch,fori); cout << "ende schreiben..." << endl; }; crypted.seekg(0,ios::beg); crypted.clear(); cout << "schreibe..." << endl; cracked << " -> Nummer " << fori << "\n"; cout << "Durchgang: " << fori << " beendet" << endl; };
Ich habe mir dank Frank jetzt mal die Zeiger position anzeigen lassen!!! Das ist der Fehler: er setzt nicht auf 0 zurück... aber warum...??? *heul*
[ Dieser Beitrag wurde am 10.06.2003 um 22:07 Uhr von ICEBE@R editiert. ]
-
Hi,
ich befasse mich gerade mit dem problem....
ich hoffe ich kann dir weiterhelfen.
Gruß
Frank
-
Vielen DAnk, ich hoffe du kannst mir helfen, ich versuchs schon den Tag lang.. sagmal hast du MSN oder IRC?
-
Allerunterste Schublade!
@Mod: Bitte schließen!
-
Hi,
das sollte nun funktionieren...
void readFile(void)
{std::ifstream crypted("test.txt");
std::ofstream cracked("out.txt");for(int i = 0; i < 257; ++i)
{
char ch = 0;while(crypted.get(ch))
{
cracked.put(crypt(ch, i));
};crypted.clear();
crypted.seekg(0, std::ios::beg);
};crypted.close();
cracked.close();
}Gruß nochmals
Frank
-
Danke(!!! DANKE DANKE DANKE DANKE), ich probiers gleich aus... hast du jetzt sowas in die richtung? IRC, MSN..?
-
TGGC,
was stört dich daran, wenn leute versuchen sich zu helfén ???
-
Nein, habe kein MSN oder IRC... aber hier gibts ja auch ein chat...
-
also komm in den Raum lobby!