2016-04-27 6 views
-1

Aus irgendeinem Grund tut meine fprintf-Anweisung nichts. Ich lege printf-Anweisungen darum herum, um zu sehen, ob es überhaupt dazu kommt (was es tut), aber ich kann immer noch nicht herausfinden, warum nichts passiert. Hier ist mein Code:fprintf schreibt nicht in Datei

#include <stdio.h> 
int main(int argc, char *argv[]) 
{ 
    char c[8]; 
    FILE *fp; 
    FILE *fp2; 
    int i=0; 
    int count,j,temp=0; 

    fp = fopen(argv[0],"r"); 
    fp2 = fopen(argv[1], "w"); 

    for(i=0; i<50;i++) 
    { 
     count = fread(c,1,8,fp); 
     if(((4<i)&&(i<10))||((14<i)&&(i<20))||((24<i)&&(i<30))||((34<i)&&(i<40))||(44<i)){ 
     continue; 
    } 
    else{ 
     for(j = 0; j<count; j++){ 
      c[j]=c[j]-'0'; 
      c[j]=c[j] << (count - (j+1)); 
      temp = temp | c[j]; 
     } 
     fprintf(fp2, "%d\n", temp); 
    } 
    } 

    fclose(fp); 
    fclose(fp2); 
    return 0; 
} 

ich mehrere Dinge ausprobiert habe, aber kann es nicht herausgefunden!

Danke !.

+0

Wenn Sie 'fopen (argv [0]," r ");' wollen, ändern Sie den Dateimodus '" r "' in '" rb "'. – BLUEPIXY

+1

Überprüfen Sie die Rückgabewerte von 'fopen'. –

+1

Vielleicht hilft auch das Durchlaufen eines Debuggers. –

Antwort

2

Das Problem ist die Nutzung von argv. Wenn Sie zwei Argumente übergeben werden soll, wie in

./myprog infile outfile 

der Name infile wird in argv[0] in argv[1], nicht sein. Das Gleiche gilt für outfile, es in argv[2] sein wird:

fp = fopen(argv[1],"r"); 
fp2 = fopen(argv[2], "w"); 

Zur Vollständigkeit der Standard den Inhalt argv[0] gibt wie folgt:

Wenn der Wert von argc größer als Null ist, wird die Zeichenfolge spitz um argv[0] repräsentiert den Programmnamen; argv[0][0] soll das Nullzeichen sein, wenn der Programmname in der Hostumgebung nicht verfügbar ist.

0

Sie greifen die falschen Argumente.

argv[0] ist immer der Name des Programms, das ausgeführt wird. Befehlszeilenoptionen übergaben den Programmstart mit argv[1].

Was Sie eigentlich tun, ist das Lesen der ausführbaren Datei und das Schreiben in Ihre Eingabedatei.

Anstatt also diese:

fp = fopen(argv[0],"r"); 
fp2 = fopen(argv[1], "w"); 

Sie wollen dies:

// check for the proper number of arguments first 
if (argc < 3) { 
    printf("usage: program file1 file2\n"); 
    exit(1); 
} 
fp = fopen(argv[1],"r"); 
fp2 = fopen(argv[2], "w");