2017-03-22 2 views
0

Wenn ich versuche, Eingaben aus einer Datei namens "file1" zu lesen, zeigt mein Programm korrekt die Anzahl der Zeichen in der Datei an, aber in einem nicht erkannten Zeichenformat. Unten ist der CodeSo zeigen Sie Zeichen aus einer Datei mit getc() an

#include <stdio.h> 
#include <stdlib.h> 
void db_sp(FILE*); 

int main(int argc,char *argv[]) 
{ 
    FILE *ifp,*ofp; 

    if(argc!=2) { 
     fprintf(stderr,"Program execution form: %s infile\n",argv[0]); 
     exit(1); 
    } 
    ifp=fopen(argv[1],"r"); 
    if (ifp==NULL) printf("sdaf"); 
    //ofp=fopen(argv[2],"w+") ; 
    db_sp(ifp); 
    fclose(ifp); 
    //fclose(ofp); 
    return 0; 
} 

void db_sp(FILE *ifp) 
{  
    char c; 
    while(c=getc(ifp) !=EOF) { 
     //printf("%c",c); 
     putc(c,stdout); 
     if(c=='\n' || c=='\t' || c==' ') 
     printf("%c",c); 
    } 
} 
+1

Bitte schreiben Sie den Code in Ihrer Frage. –

+0

Können Sie zeigen, was Ihre Datei enthält? Was druckt dein Druck? – Yashas

Antwort

2

Das Problem dabei ist:

while(c=getc(ifp) !=EOF){ 

Wegen operator precendence, diese getc(ifp) !=EOF zuerst ausgeführt wird. Dann wird c = <result of comparison> ausgeführt. Welches ist nicht die Reihenfolge, die Sie wollen.

Verwenden Sie Klammern, um die richtige Reihenfolge zu erzwingen.

while((c=getc(ifp)) !=EOF) { 

Andere Anmerkungen: getc kehrt ein int so sollten Sie die Art der c zu int ändern. Wenn Sie die Datei nicht öffnen können, fahren Sie mit der Ausführung fort. Sie sollten bei einem Fehler ordnungsgemäß beendet werden.

+2

Und ändern Sie 'char c;' in 'int c;', was der Typ ist, der von 'getc()' zurückgegeben und von 'putc()' benötigt wird. –

+0

@ WeatherVane Wahr. Aktualisiert. –

+0

@AjeyaSiddhartha für das, was es wert ist '' \ n'' ist auch vom Typ 'int'. –

Verwandte Themen