0

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

2 回答 2

5

您需要一个 do-while 循环,而不是 while-do 循环。

当 ftell() 返回零时,您需要读取字符,但不再读取。这通常表明您需要一个底部测试的循环而不是顶部测试的循环。

于 2012-05-08T14:15:22.593 回答
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);
}
于 2012-05-08T14:50:35.747 回答