我写了下面的代码,但是当我输入“abcd”时它显示“dcb”并跳过第一个字符。我知道我的while循环中的逻辑穿过文件边界但是fseek(f2)仍然不是0穿过文件边界。它应该返回一些负值。
#include<stdio.h>
int main()
{
FILE *f1,*f2;
char ch;
clrscr();
f1=fopen("Input","w");
while((ch=getchar())!=EOF)
putc(ch,f1);
fclose(f1);
f2=fopen("Input","r");
fseek(f2,-1L,2);
while(ftell(f2)!=0)
{
ch=getc(f2);
printf("%c",ch);
fseek(f2,-2L,1);
}
fclose(f2);
getch();
return(0);
}
答案 0 :(得分:5)
你需要一个do-while循环,而不是while-do循环。
当ftell()返回零时你需要读取字符,但不再读取。这通常表明您需要经过底部测试的循环,而不是经过顶级测试的循环。
答案 1 :(得分:0)
#include <stdio.h>
int main(){
FILE *fp;
int ch;
fp=fopen("out.txt","w");
while((ch=getchar())!=EOF)
fputc(ch,fp);
fclose(fp);
fp=fopen("out.txt","rb");
fseek(fp,0L,SEEK_END);
while(fseek(fp,-2L,SEEK_CUR)==0){
ch=fgetc(fp);
putchar(ch);
}
fclose(fp);
return(0);
}