注册 登录
编程论坛 C语言论坛

请问随机读写文件的问题,fseek(fp, -2, SEEK_CUR);

qing_yx 发布于 2020-05-09 16:53, 1571 次点击
#include<windows.h>
#include <stdio.h>
#include <stdlib.h>

FILE * fp;
int main(void)
{
    char temp;

    fp=fopen("letter.dat","w+");
    if (!fp)
    {
        puts("打开文件错误");
        exit(1);
    }

    for (int i = 'A'; i <= 'Z'; i++)
    {
        fputc(i,fp);
    }

    fseek(fp, -1, SEEK_END);
    for (int i = 26; i >0; i--)
    {
        temp = fgetc(fp);
        printf("%c", temp);

        fseek(fp, -2, SEEK_CUR); //字节数为什么是-2不是-1?
    }

    fclose(fp);
    puts("");

    system("pause");
    return 0;
}

2 回复
#2
星泪成寒2020-05-09 18:05
程序代码:


#include <stdio.h>
#include <stdlib.h>

FILE * fp;
int main(void)
{
    char temp;

    //打开文件
    fp=fopen("letter.dat","w+");
    if (!fp){
        puts("打开文件错误");
        exit(1);
    }

    //写入26个字母 A~Z
    for (int i = 'A'; i <= 'Z'; i++) {
        fputc(i,fp);
    }

    //将文件指针指向最后一个有效字符 ‘Z’
    fseek(fp, -1, SEEK_END);
   
    //将写入的内容倒叙读出
    for (int i = 26; i > 0; i--) {
        temp = fgetc(fp);
        printf("%c", temp);
        /*当读取一个字符时,文件指针自动后移一位,所以要读取前一个字符时需要偏移2位
         * 例如上面的代码读区了字符‘Y’,此时文件指针就是自定指向下一个字符‘Z’
         * 所以想要读区字符‘X’ 就要向前便宜2位
         
*/
        fseek(fp, -2, SEEK_CUR); //字节数为什么是-2不是-1?
    }

    fclose(fp);
    puts("");

    return 0;
}

#3
qing_yx2020-05-11 14:23
谢谢楼上大哥解惑
1