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

时间:2017-03-22 13:19:01

标签: c file getc

当我尝试从名为" file1"的文件中读取输入时,我的程序正确显示 文件中的字符数,但是采用无法识别的字符格式。 以下是代码

#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 :(得分:2)

问题在于:

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

由于operator precendence,此getc(ifp) !=EOF首先执行。然后c = <result of comparison>被执行。这不是你想要的订单。

使用括号强制执行正确的顺序。

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

其他说明: getc会返回int,因此您应将c的类型更改为int。 此外,如果您无法打开文件,仍然可以继续执行。你应该优雅地退出失败。