zweimal while(!datei.eof())
-
Trotzdem habe ich immernoch nicht den gewünschten effekt...
hier mal den code ausschnitt
for(i=0;i<257;i++) { key = i; cout << "Key: " << i << "|" << key << endl; cout << i << ". Variante" << endl; while(!in.eof()) //In die Datei einlesen { cout << "cracke..." << endl; cout << "schreibe..." << endl; out<<crypt(ch,key); cout << "schreibe char..." << endl; ch=in.get(); /*In ein char einlesen um die Datei zum eof zu bringen */ cout << ch << endl; }; //While //Anzeigen: in.clear(); isub = 256 - i; cout << "Noch " << isub << " Varianten..." << endl; }; //for
Leider überspringt er die while oder führt sie nur einmal aus...
-
Wie machst Du in auf - und wie groß ist die Datei ?
-
aufmachen:
ifstream in("text.txt");
Datei ist nicht soo groß, ein Satz unformatierter Text.
-
for(i=0;i<257;i++) { key = i; cout << "Key: " << i << "|" << key << endl; cout << i << ". Variante" << endl; while(!in.eof()) //In die Datei einlesen { cout << "cracke..." << endl; cout << "schreibe..." << endl; out<<crypt(ch,key); cout << "schreibe char..." << endl; ch=in.get(); /*In ein char einlesen um die Datei zum eof zu bringen */ cout << ch << endl; }; //While //Anzeigen: in.seekg(0,ios::beg); // <<--------------- try this pls in.clear(); isub = 256 - i; cout << "Noch " << isub << " Varianten..." << endl; }; //for
-
hm... kann es sein das da sLinux ausgelastet ist? habe das gleiche mal mit zwei for schleifen ausprobiert, er durchläuft die forschleife (fori=0;fori < 257; fori++) nur einmal und zwar: 17.
for...
{
...
for
{
...
};
};
-
Sprich doch nich rätseln....
for(int i = 0;i< 10;++i)
{}
for(;i<10;++i)
{
}geht natürlich nicht.
ka was Du machst
Zeig mal mehr source
[ Dieser Beitrag wurde am 10.06.2003 um 16:25 Uhr von Knuddlbaer editiert. ]
-
Also ich hab das Problem gelöst mit einem while und indem while eine for, so klapts...
hehe source wird nicht gezeigt, es geht halt um ein crypt programm und ein programm das mir ohne key entcryptet, quasi ein crack, aber halt noch auf kleiner ebene.
->JEtzt habe ich aber eine neue Frage:
Wie schaffe ich es einen char zu verlgleichen nach einem besonderen muster, also ob nur Buchstben sind oder zum beispiel zahl-buchstabe-zahl-zahl usw..?
-
Schau dir mal die Asciiwerte an.
Devil
-
std::isdigit std::isalpha etc.
-
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