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

while-do ループではなく、do-while ループが必要です。

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 に答える