当我尝试从名为" 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);
}
}
答案 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
。
此外,如果您无法打开文件,仍然可以继续执行。你应该优雅地退出失败。