C fseek()超出文件限制,未终止
在最后一个while循环中,应打印文件中存储的每5个字符,但循环将无限期地进行,并且不会终止。 函数的feof()在到达文件末尾时应返回1,循环应退出,但循环将无限期地进行C fseek()超出文件限制,未终止,c,fseek,C,Fseek,在最后一个while循环中,应打印文件中存储的每5个字符,但循环将无限期地进行,并且不会终止。 函数的feof()在到达文件末尾时应返回1,循环应退出,但循环将无限期地进行 #include<stdio.h> main() { long n, k; char c; FILE *fp; fp = fopen("RANDOM", "w"); while ((c = getchar()) != EOF) { putc(c, fp); } n = f
#include<stdio.h>
main() {
long n, k;
char c;
FILE *fp;
fp = fopen("RANDOM", "w");
while ((c = getchar()) != EOF) {
putc(c, fp);
}
n = ftell(fp);
printf("\nNo. of characters entered by the user is : %ld\n", n);
fclose(fp);
fp = fopen("RANDOM", "r");
while(feof(fp) == 0) {
n = ftell(fp);
c = getc(fp);
printf("The character at %ld position is %c\n", n, c);
fseek(fp, 4l, 1);
}
}
#包括
main(){
长n,k;
字符c;
文件*fp;
fp=fopen(“随机”、“w”);
而((c=getchar())!=EOF){
putc(c,fp);
}
n=ftell(fp);
printf(“\n用户输入的字符数为:%ld\n”,n);
fclose(fp);
fp=fopen(“随机”、“r”);
while(feof(fp)==0){
n=ftell(fp);
c=getc(fp);
printf(“位于%ld位置的字符是%c\n”,n,c);
fseek(fp,4l,1);
}
}
来自:
成功调用fseek()
函数将清除流的文件结束指示符
即使您将位置指示器设置在EOF后面,fseek()
也会成功。
因此,当fseek()
是循环中的最后一个命令时,while(feof(fp)==0)
将永远不会终止
相反,您可以:
for( ;; ) {
n = ftell(fp);
if( (c = getc(fp)) == EOF )
break;
printf("The character at %ld position is %c\n", n, c);
fseek(fp, 4l, SEEK_CUR);
}
1.)参见2。)您不必使用第二个
fopen(“RANDON”,“r”)
重新分配fp
,而是使用feof()
和ftell()。您可能想要fp=fopen(“随机”、“r”)代码>。完全正确。这将调用未定义的行为。您关闭了fp
,再次打开该文件,并将结果(可能是有效的文件*
)泄漏到再也看不到的地方,然后将旧的、仍然关闭的fp
发送到您的循环中。简短版本:此代码中缺少fp=
。使用c=getchar())您试图实现什么目标!=EOF
?请不要重复使用幻数1
作为fseek()的第三个参数的错误。唯一正确的值是SEEK\u SET
、SEEK\u CUR
和SEEK\u END
。