Datei wird nicht benutzt

fallen77

Grünschnabel
hallo kann mir jemand bitte erklären was hier dran falsch ist ? oder warum das nicht klappt.

Code:
 #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 */

     if( argc != 3 )
     {
        printf("\nFehler:  Falsche Anzahl an Parametern..." );
        printf("\n\nVerwendung:\n   %s dateiname aktion", argv[0]);
        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);
 }
 
Hi.

Vielleicht solltest du erstmal sagen was die Symptome sind. Wie rufst du das Programm auf und was passiert dann. Was sollte deiner Meinung nach stattdessen passieren?

Gruß
 
mein problem ist das ich es nicht zum laufen bekomme sprich immer der fehler zu wenig argumente sind, aber ich weiß nicht warum
 
mein problem ist das ich es nicht zum laufen bekomme sprich immer der fehler zu wenig argumente sind, aber ich weiß nicht warum
Du meinst beim Aufruf des Programms? Wie sehen denn die Aufrufe aus, die du ausprobiert hast?

Nebenbei: halte dich doch bitte an die Netiquette, insbesondere an Punkt 15 (durchgehend klein geschriebene Beiträge sind unerwünscht).

Grüße,
Matthias
 
Die Überprüfung, ob eine Datei geöffnet werden konnte, ist falsch formuliert. Du solltest besser schreiben
C:
if ( fh == NULL )
// noch kürzer ist      if ( !fh )
Bei einem Datei-Handle kann es oft passieren, dass das Bit gesetzt ist, welches bei Zahlenwerten als Vorzeichenbit verwendet wird, wodurch die Zahl negativ ist. Deine Abfrage würde also auch dann zutreffen, wenn die Datei korrekt geöffnet werden konnte.
 
Du meinst beim Aufruf des Programms? Wie sehen denn die Aufrufe aus, die du ausprobiert hast?

Nebenbei: halte dich doch bitte an die Netiquette, insbesondere an Punkt 15 (durchgehend klein geschriebene Beiträge sind unerwünscht).

Grüße,
Matthias

Visual Studio 2008 und dann gehe ich auf Debuggen wie sonst auch immer. Sollte starten und ich sollte doch nach der Logik damit arbeiten können oder irre ich mich da.
 
Moin,

Du meinst beim Aufruf des Programms? Wie sehen denn die Aufrufe aus, die du ausprobiert hast?

Matthias meinte "mit welchen Werten/Argumenten (was und wieviele)" Du das Programm aufrufst ....

mein problem ist das ich es nicht zum laufen bekomme sprich immer der fehler zu wenig argumente sind, aber ich weiß nicht warum
Diese Aussage von Dir lässt vermuten, dass es nicht genug sind :eek::p

Gruß
Klaus
 
ja mit nichts weil ja gleich immer die Fehlermeldung kommt.

eigentlich soll mir das Programm einen Datei einlesen , diese soll verschlüsselt oder entschlüsselt werden, 3 Argumente, für Datei, codieren und decodieren.

ja aber warum sind es nicht genug ? Das frage ich doch die ganze Zeit xD
 
ja mit nichts weil ja gleich immer die Fehlermeldung kommt.
ja aber warum sind es nicht genug ? Das frage ich doch die ganze Zeit xD

Dann ist es doch klar :eek:

C++:
int main( int argc, char *argv[])
{
    ...
    if( argc != 3 )
    {
    ...

Deine Main-Funktion erwartet 3 Argumente (!) Du prüfst ja auch sogar, ob es 3 Stück sind.
Wenn Du also, wie Du schreibst, KEINE Parameter übergibst, solltest Du Dich auch nicht wundern ......

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Du kannst Befehlsargumente in den Projekeinstellungen bei Debugging->Befehlsargumente angeben.

Wenn du dort keine angegeben hast, ist es ja klar das auch keine Argumente an das Programm übergeben werden.

Du kannst das Programm natürlich auch einfach auf der Kommandozeile aufrufen.

Gruß
 
Zurück