2017-03-22 40 views
0

當我嘗試從名爲「file1」的文件讀取輸入時,我的程序正確顯示文件中的字符數 ,但以無法識別的字符格式顯示。 下面是代碼如何使用getc()顯示從文件中讀取的字符

#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

請在您的問題中發佈代碼。 –

+0

你能顯示你的文件包含什麼嗎?你的公主打印什麼? – Yashas

回答

2

的問題是在這裏:

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

因爲operator precendence,這getc(ifp) !=EOF最先被執行。然後c = <result of comparison>得到執行。這不是你想要的順序。

使用括號強制正確的順序。

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

其他說明: getc返回一個int所以你應該改變的c類型int。 另外,如果您無法打開文件,您仍然繼續執行。你應該優雅地退出失敗。

+2

並將'char c;'改爲'int c;',這是'getc()'返回並且由'putc()'所要求的類型。 –

+0

@WeatherVane是的。更新。 –

+0

@AjeyaSiddhartha它的價值''\ n''也是'int'類型。 –

相關問題