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

How to display characters read from a file using 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);
    }
}

问题出在这里:

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

因为operator precendence,这个getc(ifp) !=EOF先被执行。然后 c = <result of comparison> 被执行。这不是你想要的顺序。

使用括号强制顺序正确。

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

其他注意事项: getc returns 和 int 所以你应该将 c 的类型更改为 int。 另外,如果您打开文件失败,您仍然继续执行。你应该在失败时优雅地退出。