在C中反转文本文件

时间:2012-05-08 14:09:03

标签: c

我写了下面的代码,但是当我输入“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);
}

2 个答案:

答案 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);
}