Verschlüsselungsprogramm
-
Hi!
Ich habe mir ein Verschlüsselungsprogramm geschrieben, was mit die ascitabelle um 13 zeichen verschiebt. (rot13) Jetzt habe ich das Problem, dass wenn ein Zeilenumbruch in der .txt ist, am schluss beim entschlüsseln ein Zeichen zuviel dran ist! Wenns nur eine Zeile ist, klappt es prima, auch andere steuerzeichen wie lerrzeichen, tab machen keine Probleme. hoffe mir kann jemand helfen, hier der code.#include <iostream.h> #include <fstream.h> #include <conio.h> void verschluesselung(); void entschluesselung(); int main() //Standart-Auswahl Menü { char auswahl; while (auswahl != 'b') { system("cls"); cout << " -Verschluesselungsprogramm-" << "\n\n\n\n\n"; cout << " [V] - Datei verschluesseln" << "\n"; cout << " [E] - Datei entschluesseln" << "\n"; cout << " [B] - Beenden" << "\n"; auswahl=getch(); switch (auswahl) { case 'v' : verschluesselung(); break; case 'e' : entschluesselung(); break; } } return 0; } void verschluesselung() //Verschluesselung der Datei { char original, bild, pfad[256]; int asci; system("cls"); cout << "Pfad der zu verschluesselnden Datei eingeben: "; cin.getline(pfad,256); ifstream datei_l (pfad); //zum Lesen öffnen ofstream datei_s (pfad,ios::in); //zum Schreiben öffnen datei_l.seekg(0); //hier die Anfangsposition einsetzen datei_s.seekp(0); //hier Anfangs-Schreibposition einsetzen datei_l.get(original); //erstes Zeichen holen while ( datei_l.good()) { asci = original; if (asci > 128) asci = 256 + asci; asci += 13; bild = asci; datei_s << bild; datei_l.get(original); //Zeichen holen } datei_l.close(); datei_s.close(); getch(); } void entschluesselung() //Entschluesselung der Datei { char original, bild, pfad[256]; int asci; system("cls"); cout << "Pfad der zu entschluesselnden Datei eingeben: "; cin.getline(pfad,256); ifstream datei_l (pfad); //zum Lesen öffnen ofstream datei_s (pfad,ios::in); //zum Schreiben öffnen datei_l.seekg(0); //hier die Anfangsposition einsetzen datei_s.seekp(0); //hier Anfangs-Schreibposition einsetzen datei_l.get(bild); //erstes Zeichen holen while ( datei_l.good()) { asci = bild; if (asci > 128) asci = 256 + asci; asci -= 13; original = asci; datei_s << original; datei_l.get(bild); //Zeichen holen } datei_l.close(); datei_s.close(); getch(); }
-
Du schreibst in die Datei aus der Du gerade liest. Ausserdem prüfst Du den state von dem Schreibstream nicht.
Schreib mal in eine zweite Datei. Bei mir lief es danach.ofstream datei_s( path, ios::in);
ist zumindest suspekt. Was soll das ios::in bewirken.
Die Includes von iostream und fstream sollten ohne ".h" geschehen:
#include <iostream> #include <fstream> using namespace std;
char auswahl; while (auswahl != 'b')
Auswahl wird benutzt, bevor es gesetzt wurde. Entweder Auswahl initialisieren, oder z.B. eine do { } while Schleife nutzen.