我的c程序哪错了,为什么读文件显示的是乱码

来源:百度知道 编辑:UC知道 时间:2024/05/22 07:58:09
main()
{
int i,j,c;
char letter[256];

FILE*fp;

if((fp=fopen("abc.txt","r+"))==NULL)
{
printf(" 打开文件失败!\n");
exit(0);
}
else
{
printf("打开文件成功!\n");
}

do
{
i=0;
while((c=fgetc(fp)!=EOF))
{
letter[i]=c;
i++;
if (c=='\0')
break;
}
letter[i]='\0';
printf("%s",letter);
}while(c!=EOF);
fclose(fp);
}

while( ( c = fgetc(fp) != EOF ) )
这里错了。

( c = fgetc(fp) != EOF )外面这个括号是多余的,括号不该打在这儿,而应该是
( c = fgetc(fp) ) != EOF
因为!=的优先级比赋值号=高,你之前的写法,真正求值顺序相当于
c = (fgetc(fp) != EOF),所以直到fgetc读到文件末尾之前,c的值都是1,因为fgetc返回的值不等于EOF,但是当fgetc读到文件末尾的时候,
(fgetc(fp) != EOF)的值就是0,while循环退出,但是你要注意,c的值也变成0了。这样到你后面的do...while的测试c != EOF就衡成立,因为EOF在stdio.h里面定义的值不是0,然后就死循环了。我对你的两层循环作了一点小小的改动,那样输出的格式会和txt文件里面的保持一致。如下

do
{
i = 0;
while((c = fgetc(fp)) != EOF && c != '\n')
{
letter[i] = c;
i++;
}
letter[i++] = '\n';
letter[i] = '\0';
printf("%s", letter);
}while(c != EOF);

if((fp=fopen("abc.txt","r+"))==NULL)
把+去了试试