如何使用 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
。
另外,如果您打开文件失败,您仍然继续执行。你应该在失败时优雅地退出。
当我尝试从名为 "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
。
另外,如果您打开文件失败,您仍然继续执行。你应该在失败时优雅地退出。