Programm zum Verschlüsseln von Text Datein



  • Hallo Zusammen,

    ich habe ein Problem mit einem selbstgeschriebenen Programm zum Verschlüsseln von Text Datein

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include <stdlib.h>
    #include<ctype.h>
    
    void Dateiverarbeitung(FILE *inp, FILE *out, int Verschiebung, char *argv[]);
    
    void main(int argc ,char* argv[])
    {
    	int Verschiebung;
    	int Fehlercode=0;
    	FILE *inp; //Zeiger auf Eingabe-Dateistrucktur
    	FILE *out; //Zeiger auf Ausgabe-Dateistrucktur
    
    	//Prüfen ob die Eingabe mit der Anzahl der Parameter stimmen kann
    	if(argc!=4) printf("Die Eingabe war nicht Korrekt!\n");
    
    	else
    	{
    
    		//Datei zum einlesen öffnen
    		inp=fopen(argv[1],"rt");
    		if(inp=NULL)Fehlercode=1;
    
    		//Datei zur Ausgabe öffnen
    		out=fopen(argv[2],"wt");
    		if(out=NULL)
    		{
    			//Eingabedatei im Fehlerfall schließen
    			fclose(inp);
    			Fehlercode=2;
    		}
    
    		Verschiebung=*argv[3];
    
    		if(Verschiebung>25 || Verschiebung<1)
    		{
    			//Datein im Fehlerfall schließen
    			fclose(inp);
    			fclose(out);
    
    			if (Verschiebung>25) Fehlercode=3;
    			else Fehlercode=4;
    		}
    
    		else if(Fehlercode==0)
    		{
    			//Aufruf des Unterprogramms zur Dateiverarbeitung
    			Dateiverarbeitung(inp, out, Verschiebung, argv);
    		}
    
    		if(Fehlercode==0)printf("Vielen Dank für die Benutzung des Programms!\n");
    		else if(Fehlercode==1)printf("Die Datei mit dem Namen %s \n konnte nicht geöffnet werden!",argv[1]);
    		else if(Fehlercode==2)printf("Die Datei mit dem Namen %s \n konnte nicht geöffnet werden!",argv[2]);
    		else if(Fehlercode==3)printf("Die Zahl %s ist zum Verschieben ist zu groß!",argv[3]);
    		else if(Fehlercode==4)printf("Die Zahl %s ist zum Verschieben ist zu klein!",argv[3]);
    	}
    }
    
    void Dateiverarbeitung(FILE *inp, FILE *out, int Verschiebung, char *argv[])
    {
    
    	char Zeichen; // Variable zum abspeichern des aktuellen Zeichens
    
    	//Datei verarbeiten
    
    	do
    	{
    		Zeichen=fgetc(inp);  //Auslesen des aktuellen Zeichens
    		Zeichen=toupper(Zeichen);
    
    		//Verschlüsseln des Zeichens
    		if(Zeichen>=65&&Zeichen<=80) Zeichen= Zeichen+Verschiebung;
    
    		fputc(Zeichen, out);
    
    	}while(!feof(inp));
    
    	//Datein schließen
    	fclose(inp);
    	fclose(out);
    
    }
    

    Beim Aufruf in der Windows Konsole bekomme ich einen fehler mit dem fclose in dem Pfad

    f:\dd\vctools\crt_bld\self_x86\crt\src\fclose.c
    Line 46

    Ich habe schon ein paar stunden mit Fehlersuche verbracht aber kann einfach nichts finden vielleicht haben die Profis unter euch ja eine Idee.

    Gruß und vielen Dank schon einmal



  • int Verschiebung;
    Verschiebung=*argv[3];
    

    So kannst du keine Zahlen aus Strings extrahieren.



  • ok...

    wie bekomme ich die Zahl denn am besten aus dem string raus?



  • ok ich habe nun den atoi befehl verwendet nun taucht aber der gleiche fehler im zusammenhang mit fgetc auf:

    f:\dd\vctools\crt_bld\self_x86\crt\src\fgetc.c
    Line 41

    Expression(stream!=0)



  • if(inp=NULL)
    
    if(out=NULL)
    

    = ist eine Zuweisung. == ist ein Vergleich auf Gleichheit.

    //Eingabedatei im Fehlerfall schließen
    
    //Datein im Fehlerfall schließen
    

    Die Übergabe von NULL an fclose undefiniertes Verhalten. Im Fehlerfall solltest du inp oder out also nicht schließen!

    char Zeichen
    

    Zeichen sollte int sein. fgetc gibt nämlich nicht char zurück, sondern auch das Makro vom Typ int EOF. Du kannst also per fgetc auch auf end-of-file überprüfen.



  • ah wunderbar!

    Vielen dank für die Hilfe der Fehler lag an der Zuweisung anstelle des Vergleichoperators 😉

    Supi danke!


  • Mod

    Da sind noch mehr Fehler drin. Einer, der mir spontan auffällt ist, dass du das EOF-Zeichen verarbeitest, das von fgetc eigentlich als fehlerwert zurück gegeben wird, als ob es ein normales Zeichen aus der Datei wäre. Merke: Eine datei wird "eof", nachdem über das Ende gelesen wurde, nicht, wenn der Dateizeiger vor dem Ende steht.

    Da sind bestimmt noch mehr Fehler drin vom Stil her zu urteilen. Irgendwie erinnert mich dieser an etwas. Du hast nicht zufällig Jürgen Wolfs "C von A bis Z" gelesen, oder?



  • Nein habe ich nicht gelesen.

    Ja der Fehler ist mir auch aufgefallen mit dem Dateiende habe ich acuh schon behoben.

    Wenn das Programm erstmal ansich läuft dann kann man die anderen Fehler wesentlich besser finden, bin gerade dabei noch ein paar heraus zuarbeiten. Konnte halt nur nichts mit dem ersten Fehler anfangen die restlichen finde ich hoffentlich 😃

    Vielen Dank euch 🙂


Anmelden zum Antworten