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.


Anmelden zum Antworten