首页
社区
课程
招聘
C语言文件操作疑问[求助]
2006-5-11 13:56 3948

C语言文件操作疑问[求助]

2006-5-11 13:56
3948
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *f;
    if((f = fopen("Super.txt","r+")) == NULL)
    {
        printf("big error\n");
        getchar();
        exit(1);
    }   
    char ch;
    if(fseek(f,1,1) == EOF)
    {
        printf("seek error\n");
    }   
    for(int i=0;i<3;i++)
    {
        printf("%c\n",fgetc(f));
        fputc('k',f);
        printf("%c\n",fgetc(f));
    }   
    fclose(f);
    system("pause");
    return 0;
}
程序运行结果如下:(我不明白结果为什么会是这样)



麻烦详细讲解一下 ,先谢谢了

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2006-5-11 15:13
2
0
#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *f;
    if((f = fopen("Super.txt","r+")) == NULL)
    {
        printf("big error\n");
        getchar();
        exit(1);
    }   
    char ch;
    if(fseek(f,1,1) == EOF) /* 改成if(fseek(f,0,SEEK_CUR) == EOF) 将指针偏移改为0开始 */
    {
        printf("seek error\n");
    }   
    for(int i=0;i<3;i++)
    {
        printf("%c\n",fgetc(f)); /* 这里不能同时使用fgetc和fputc,因为fgetc和fputc每操作一次都会将文件指针++ */
        fputc('k',f);
        printf("%c\n",fgetc(f));
    }   
    fclose(f);
    system("pause");
    return 0;
}

/* 所以,将你上面的源码改成如下 */
#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *f;
    if((f = fopen("Super.txt","r+")) == NULL)
    {
        printf("big error\n");
        getchar();
        exit(1);
    }   
    char ch;
    if(fseek(f,0,SEEK_CUR) == EOF)
    {
        printf("seek error\n");
    }   
    for(int i=0;i<=3;i++)
    {
                fputc('k',f); /* 连续写入4个'k' */
    }
    if(fseek(f,0,SEEK_SET) == EOF) /* 重新设定文件指针 */
    {
        printf("seek error\n");
    }
    for(i=0; i<=3;i++) /* 将写入的内容一个一个打印出来 */
    {
               printf("%c\n",fgetc(f));
    }
    fclose(f);
    system("pause");
    return 0;
}
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
Aker 4 2006-5-11 15:23
3
0
  fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
其表示方法如表
起始点    表示符号    数字表示
──────────────────────────
文件首    SEEK―SET    0
当前位置   SEEK―CUR    1
文件末尾   SEEK―END     2
例如:
fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后, 即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。

-------------------------------------------------------
  fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为: 字符变量=fgetc(文件指针); 例如:ch=fgetc(fp);其意义是从打开的文件fp中读取一个字符并送入ch中。

  对于fgetc函数的使用有以下几点说明:
1. 在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。

2. 读取字符的结果也可以不向字符变量赋值,例如:fgetc(fp);但是读出的字符不能保存。

3. 在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后, 该位置指针将向后移动一个字节。 因此可连续多次使用fgetc函数,读取多个字符。 应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
-------------------------------------------------------
  fputc函数的功能是把一个字符写入指定的文件中,函数调用的 形式为: fputc(字符量,文件指针); 其中,待写入的字符量可以是字符常量或变量,例如:fputc('a',fp);其意义是把字符a写入fp所指向的文件中。

  对于fputc函数的使用也要说明几点:
1. 被写入的文件可以用、写、读写,追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。

2. 每写入一个字符,文件内部位置指针向后移动一个字节。

3. fputc函数有一个返回值,如写入成功则返回写入的字符, 否则返回一个EOF。可用此来判断写入是否成功。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
vlit 2006-5-11 22:24
4
0
非常感谢 小虾版主以及Aker的帮助~~~~~~~

顺便问一下,你们知道哪里有C函数的详细用法讲解吗?
Google出来的结果都不是很满意,大都大概说一下参数的含义,很模糊。。。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuanqing 2006-5-11 23:15
5
0
MSDN里应该有吧?
雪    币: 235
活跃值: (41)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
alpsdew 4 2006-5-12 09:35
6
0
我最近得了一点C语言函数参考,主要是讲些函数的,楼主想要的话可以共享!
因为不能上传附件,所以只好用邮箱!
游客
登录 | 注册 方可回帖
返回