Problem mit .txt Verarbeitung (bei Caesar-Verschlüsselung)



  • Grüßt euch,

    ich arbeite grad an einem Verschlüsselungsprogramm, das man mit einigen Parametern öffnen soll.

    Der erste Parameter soll die .txt Datei sein die verschlüsselt werden soll, der zweite Parameter die Ausgabe und der dritte die Anzahl Zeichen, um die das Dokument verschlüsselt werden soll.

    Für die, die die Cäsar-Verschlüsselung nicht kennen:
    Die Buchstaben werden einfach um eine bestimmte Anzahl Buchstaben verschoben.

    Ich wollte es erstmal langsam angehen und habe die Verschlüsselung noch weggelassen. Ich wollte erstmal ein Programm, dass eine .txt Datei öffnet und in eine andere kopiert, doch leider gibt mir mein Compiler immer wieder folgenden Fehler:

    http://s1.directupload.net/images/120329/gx5wmwxt.jpg

    Habe mir die Funktionen extra nochmal angeguckt und konnte bei mir keinen Fehler finden, weshalb ich das Programmstück mal poste. ich hoffe ihr könnt mir weiterhelfen! 😕

    #include <stdio.h>
    #include <string.h>
    
    void main(int argc, char *argv[])
    {	
    	char InputFileName[]="text.txt";
    	char OutputFileName[]="kodiert.txt";
    
    	FILE *inp;
    	FILE *out;
    	char ch;
    
    	//Datei öffnen
    	inp=fopen(InputFileName, "rt");//statt Inputfilename später argv[1]
    	if(inp==NULL)
    	{
    		printf("Konnte %s nicht oeffnen\n",InputFileName);
    		getchar();
    		return;
    	}
    
    	out=fopen(OutputFileName, "wt");//statt Outputfilename später argv[2]
    	if(out=NULL)
    	{
    		printf("Konnte %s nicht oeffnen\n",OutputFileName);
    		fclose(inp);
    		return;
    	}
    
    	//Kopier-Vorgang, später Kodierung
    	ch=fgetc(inp);
    	while(!feof(inp))
    	{
    		fputc(ch,out);
    		ch=fgetc(inp);
    	}
    
    	//Dateien schließen
    	fclose(inp);
    	fclose(out);
    	return;
    }
    


  • Zeile 24: if(out==NULL) anstatt if(out=Null)

    Bin grade leider am Handy von daher nicht viel Möglichkeiten abr das ist etwas, was mir direkt ins Auge sprang.



  • Videonauth schrieb:

    Zeile 24: if(out==NULL) anstatt if(out=Null)

    Bin grade leider am Handy von daher nicht viel Möglichkeiten abr das ist etwas, was mir direkt ins Auge sprang.

    Vielen Dank!! 🙂

    Das wars sogar schon!

    Springt mit leider noch nicht ins Auge, dafür fehlt die Übung.


  • Mod

    Das = vs. == war der Hauptfehler. Ein paar andere Sachen:

    1. Wenn du festgestellt hast, dass fopen einen Nullpointer zurückgeliefert hat, dann ist das eine ganz schlechte Idee, diesen Nullpointer auch noch zu schließen.
    2. main muss im Allgemeinen int zurückgeben, auch wenn manche Compiler als Zusatzfeature andere Signaturen durchgehen lassen. Dein Code funktioniert dann eben nur mit diesen speziellen Compilern. Außerdem wäre sich hier doch die Rückgabe von EXIT_FAILURE und EXIT_SUCCESS ganz besonders anbieten, schließlich unterscheidest du doch schon nach Erfolg und Misserfolg.



  • Schau dir noch mal an welche Parameter (vor allem der Typ) fputc und fgetc erwarten.



  • Danke erstmal für die weitere Hilfe.

    Zu 1.: Ich nehme einfach mal an du meinst die Zeilen 16 und 24, die werden danach doch gar nicht geschlossen oder? In der If-Anweisung ist ja noch ein return drin.

    zu 2.: Nehm ich mir zu Herzen mit void und die beiden anderen kenne ich noch nicht, werde ich dann aber nochmal nachschauen und mit reinnehmen.



  • DirkB schrieb:

    Schau dir noch mal an welche Parameter (vor allem der Typ) fputc und fgetc erwarten.

    Habe ich eigentlich gemacht. fgetc erwartet einen Filepointer und fputc eine int Variable (char geht aber auch) und einen Filepointer. Funktioniert jetzt auch so weit, ich will jetzt erstmal noch das Programm ändern, dass die Kommandozeilenparameter ein eingelesene .txt Datei und die ausgegebene angeben und dann kümmer ich mich ums Verschlüsseln.


  • Mod

    Tüftler schrieb:

    Zu 1.: Ich nehme einfach mal an du meinst die Zeilen 16 und 24, die werden danach doch gar nicht geschlossen oder? In der If-Anweisung ist ja noch ein return drin.

    Habe ich falsch gelesen, bin mit deinen Namen durcheinander gekommen.


Anmelden zum Antworten