was klappt hier nicht ?
-
/* Program: codierer.c * Aufruf: codierer [dateiname] [aktion] * dateiname = Dateiname für/mit codierten Daten * aktion = D zum Decodieren und alles andere zum * Codieren * – – – – - – – – – – – – – – – – – – – – – – – */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int zeichen_codieren( int ch, int wert ); int zeichen_decodieren( int ch, int wert ); int main( int argc, char *argv[]) { FILE *fh; /* Datei-Handle */ int rv = 1; /* Rückgabewert */ int ch = 0; /* Variable zur Aufnahme eines Zeichens */ unsigned int ctr = 0; /* Zähler */ int wert = 5; /* Wert, mit dem codiert wird */ char puffer[256]; /* Puffer */ printf("Bitte Datei name eingeben\n"); scanf("%ca"); printf("C für Codiern und D für dekodiern\n"); scanf("%c"); if( argc != 3 ) { printf("\nFehler: Falsche Anzahl an Parametern..." ); printf("\n\nVerwendung:\n %s dateiname aktion", argv[0]); scanf("%s printf("\n\n Wobei:"); printf("\n dateiname = zu codierende/decodierende Datei"); printf("\n aktion = D zum Decodieren, C zum Codieren\n\n"); rv = -1; /* Rückgabewert */ } else if(( argv[2][0] == 'D') || (argv [2][0] == 'd' )) /*decodieren*/ { fh = fopen(argv[1], "r"); /* öffnet die Datei */ if( fh <= 0 ) /* prüft auf Fehler */ { printf( "\n\nFehler beim Öffnen der Datei..." ); rv = -2; /* Fehlercode setzen */ } else { ch = getc( fh ); /* liest ein Zeichen ein */ while( !feof( fh ) ) /* prüft das Ende der Datei */ { ch = zeichen_decodieren( ch, wert ); putchar(ch); /* schreibt das Zeichen auf den Bildschirm */ ch = getc( fh); } fclose(fh); printf( "\n\nDatei auf dem Bildschirm decodiert.\n" ); } } else /* Codierung */ { fh = fopen(argv[1], "w"); if( fh <= 0 ) { printf( "\n\nFehler beim Erzeugen der Datei..." ); rv = -3; /* Fehlercode setzen */ } else { printf("\n\nZu codierenden Text eingeben. "); printf("Mit Leerzeile beenden.\n\n"); while( fgets(puffer, 256, stdin) != NULL ) { if( strlen (puffer) <= 1 ) break; for( ctr = 0; ctr < strlen(puffer); ctr++ ) { ch = zeichen_codieren( puffer[ctr], wert ); ch = fputc(ch, fh); /*Zeichen in die Datei schreiben*/ } } printf( "\n\nDatei codiert.\n" ); fclose(fh); } } getch(); return (rv); } int zeichen_codieren( int ch, int wert ) { ch = ch + wert; return (ch); } int zeichen_decodieren( int ch, int wert ) { ch = ch - wert; return (ch); }
-
nyuu_3 schrieb:
/* Program: codierer.c * Aufruf: codierer [dateiname] [aktion] * dateiname = Dateiname für/mit codierten Daten * aktion = D zum Decodieren und alles andere zum * Codieren * – – – – - – – – – – – – – – – – – – – – – – – */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int zeichen_codieren( int ch, int wert ); int zeichen_decodieren( int ch, int wert ); int main( int argc, char *argv[]) { FILE *fh; /* Datei-Handle */ int rv = 1; /* Rückgabewert */ int ch = 0; /* Variable zur Aufnahme eines Zeichens */ unsigned int ctr = 0; /* Zähler */ int wert = 5; /* Wert, mit dem codiert wird */ char puffer[256]; /* Puffer */ char eingabe; // irgendwo müssen die eingaben von scanf ja landen // warum ist der Teil überhaupt drin? du holst dir das doch sowieso aus den programmargumenten... /* printf("Bitte Datei name eingeben\n"); scanf("%c",&eingabe); printf("C für Codiern und D für dekodiern\n"); scanf("%c",&eingabe); */ if( argc != 3 ) { printf("\nFehler: Falsche Anzahl an Parametern..." ); printf("\n\nVerwendung:\n %s dateiname aktion", argv[0]); scanf("%c",&eingabe); // hier fehlte "); <---------------------------------- printf("\n\n Wobei:"); printf("\n dateiname = zu codierende/decodierende Datei"); printf("\n aktion = D zum Decodieren, C zum Codieren\n\n"); rv = -1; /* Rückgabewert */ } else if(( argv[2][0] == 'D') || (argv [2][0] == 'd' )) /*decodieren*/ { fh = fopen(argv[1], "r"); /* öffnet die Datei */ if( fh <= 0 ) /* prüft auf Fehler */ { printf( "\n\nFehler beim Öffnen der Datei..." ); rv = -2; /* Fehlercode setzen */ } else { ch = getc( fh ); /* liest ein Zeichen ein */ while( !feof( fh ) ) /* prüft das Ende der Datei */ { ch = zeichen_decodieren( ch, wert ); putchar(ch); /* schreibt das Zeichen auf den Bildschirm */ ch = getc( fh); } fclose(fh); printf( "\n\nDatei auf dem Bildschirm decodiert.\n" ); } } else /* Codierung */ { fh = fopen(argv[1], "w"); if( fh <= 0 ) { printf( "\n\nFehler beim Erzeugen der Datei..." ); rv = -3; /* Fehlercode setzen */ } else { printf("\n\nZu codierenden Text eingeben. "); printf("Mit Leerzeile beenden.\n\n"); while( fgets(puffer, 256, stdin) != NULL ) { if( strlen (puffer) <= 1 ) break; for( ctr = 0; ctr < strlen(puffer); ctr++ ) { ch = zeichen_codieren( puffer[ctr], wert ); ch = fputc(ch, fh); /*Zeichen in die Datei schreiben*/ } } printf( "\n\nDatei codiert.\n" ); fclose(fh); } } getch(); return (rv); } int zeichen_codieren( int ch, int wert ) { ch = ch + wert; return (ch); } int zeichen_decodieren( int ch, int wert ) { ch = ch - wert; return (ch); }
siehe Kommentare...
Nächstes Mal dann bitte doch etwas mehr schreiben, das sollte hier doch einen wunderschönen Fehler gebracht haben...
-
ja nach der logik sollte es eigentlich klappen tat es aber nicht, tut es noch immer nicht und ich weiß nicht warum O.o ich werd noch bekloppt.
oder sollte ich direkt eine datei übergeben ? oder eine festlegen ne fest aber das ist nicht sinn der sache. :xmas2: ich werd noch rum elch
-
verdammte axt... sowas früh am morgen...
was macht das programm denn bei dir und was soll es machen?