如何使用getc()显示从文件中读取的字符

如何使用getc()显示从文件中读取的字符

问题描述:

当我尝试从名为“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

的问题是在这里:

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'类型。 –