69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *in, *out;
char ch, infile[10], outfile[10];
printf("输入读入文件的名字:");
scanf("%s", infile);
printf("输入输出文件的名字:");
scanf("%s", outfile);
if ((in = fopen(infile, "r")) == NULL)
{
printf("无法打开此文件\n");
exit(0);
}
if ((out = fopen(outfile, "w")) == NULL)
{
printf("无法打开此文件\n");
exit(0);
}
while (!feof(in))
{
ch = fgetc(in);
fputc(ch, out);
putchar(ch);
}
putchar(10);
fclose(in);
fclose(out);
return 0;
}
computer and c
computer and c
总共14个字符,文件只有14个字节?
那EOF在哪里呢?
程序是怎么找到EOF的呢?这个有点不明白,百科搜EOF也没有答案。。。
#include<stdio.h>
int main()
{
FILE *pflIn;
char cIn;
int iIn;
pflIn = fopen("f:\\b.txt", "rb");
if(pflIn == NULL)
{
puts("sdfsdfds");
return 0;
}
cIn = fgetc(pflIn);
while (cIn!=EOF)
{
printf("%d\n", cIn);
cIn = fgetc(pflIn);
}
printf("%d\n", EOF);
return 0;
}
[/quote]
[/quote]while (!feof(in))
{
ch = fgetc(in);
fputc(ch, out);
putchar(ch);
}
当读出最后一个字节时,feof(in) == 0, 接着又进入while
ch = fgetc(in);之后, feof(in) != 0了, 之后便该跳出循环了。
for(;;)
{
ch = fgetc(in);
if(feof(in))
{
break;
}
fputc(ch, out);
putchar(ch);
}
computer and c
总共14个字符,文件只有14个字节?
哪EOF在哪里呢?
程序是怎么找到EOF的呢?这个有点不明白,百科搜EOF也没有答案。。。
ch = fgetc(in);
while (!feof(in))
{
fputc(ch, out);
putchar(ch);
ch = fgetc(in);//读取之后判断,是否文件结束,如果是结束,就不用写出了。
}
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
while (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。