设为首页 加入收藏

TOP

C语言新建文件读出文件内容(七)
2014-07-19 22:52:48 来源: 作者: 【 】 浏览:276
Tags:语言 新建 文件 读出 内容


    三、格式化读写函数--fscanf( )函数和fprint( )函数
    调用方式分别是: fscanf(文件指针,格式字符串,输入表);
    fscanf 函数将指针指向的文件内容,以格式符要求的形式,读入内存指定地址内 fprintf(文件指针,格式字符串,输出表);fprintf 函数是将内存指定地址内的内容,以格式符要求的形式,输出到指针指向的文件
    说明: 以上两个函数与scanf( ) 和printf( )函数 只有一点不同:即前二者的读写对象是磁盘数据文件,即是文件指针指向的磁盘文件。 用fscanf( )和fprintf( )函数对磁盘文件 进行读写,使用方便,容易理解,但是,由于输入是要将ASCII码转换为二进制形式,输出时又要将二进制形式转换成字符,花费时间较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fscanf( )和fprintf( )函数,而用fread和fwrite函数。
    例:编制一个程序,建立一个电话簿,包括姓名和电话号码两项内容,该程序有增加新姓名和电话号码的功能,也可以根据姓名查询已经存入电话簿的电话号码。
    程序在设计时将分别设计成三个函数:
    1.菜单选项--menu( )
    2.增加新电话号码--add-num( )
    3.查询老电话号码--lookup( )。
    #include<stdio.h>
    #include<stdlib.h>
    #include <ctype.h>
    #include<string.h>
    void add_num( ),lookup( );
    char menu();
    int main( )
    {
    char choice;
    do
    {
    choice=menu( );
    switch(choice)
    {
    case 'a':
    add_num( );
    break;
    case 'l':
    lookup( );
    break;
    }
    }while(choice!='q');
    return 0;
    }
    char menu( )
    {
    char ch;
    do{
    printf("(A)dd,(L)ookup or (Q)uit:");
    ch=tolower(getche( ));/*从键盘读取一个数据,小写字母不做处理,大写字母转换成小写字母*/
    printf("\n");
    }while(ch!='q'&&ch!='a'&&ch!='l');
    return ch;
    }
    void add_num( )
    {
    FILE * fp;
    char name[80];
    int num;
    if((fp=fopen("phone","a"))==NULL)
    {
    printf("cannot open directory file\n");
    exit(1);
    }
    printf("enter name and number:");
    fscanf(stdin,"%s %d",name,&num);/*从输入流中读取数据到name和num*/
    fscanf(stdin,"%*c");/*接收键盘敲回车后的换行符*/
    fprintf(fp,"%s %d\n",name,num);/*将name和num信息写入文件中*/
    fclose(fp);
    }
    void lookup( )
    {
    FILE *fp;
    char name[80],name2[80];
    int num;
    if((fp=fopen("phone","r"))==NULL)
    {
    printf("cannot open directory file\n");
    exit(1);
    }
    printf("name ");
    gets(name);/*获取屏幕输入的字符串*/
    while(!feof(fp))/*判断是否到文件结尾处*/
    {
    fscanf(fp,"%s%d",name2,&num);/*从文件中读取数据到name2和num变量中*/
    if(!strcmp(name,name2))/*比较输入的字符串是否和文件中的字符串相等*/
    {
    printf("%s: %d\n",name,num);
    break;
    }
    }
    fclose(fp);
    }
    请运行程序,可以得到如下结果:
    (A)dd,(L)ookup or (Q)uit:A Enter name and number: Liming 6789 1234 135
    (A)dd,(L)ookup or (Q)uit:A Enter name and number: Lihung 5678 235 357
    (A)dd,(L)ookup or (Q)uit:L name Liming Liming:(6789)1234-135
    (A)dd,(L)ookup or (Q)uit:Q
    四、读入整型量函数--- getw( )函数和putw( )函数
    调用方式如下例:
    i=getw(fp);     它的作用是从磁盘文件读一个整数到内存,赋给整型变量i.
    putw(10,fp);    它的作用是将整数10输出到fp指向的文件。
    五、读写字符串函数-- fgets( )函数和fputs( )函数
    调用方式分别为:
    fgets(字符数组,n,fp);
    fgets( )函数的作用是将fp指向的文件中(n-1)个字符读入字符数组,并且加结束符"\0",若在(n-1) 个字符前遇到EOF或换行符,均结束读入。
    fputs(字符数组,fp);
    fputs( )函数的作用是向指定的文件输出一个字符串。如:fputs("china",fp);
    说明:fgets( )和fputs( )函数与gets( )和puts( )函数的不同之处也在于:前二者的读写对象为指定的文件。
    六、用户自定义读写函数
    如果用户对于读写盘文件还有特殊的要求,或者是在某些C编译的库函数中,不包括前面所介绍的那些读写函数,用户也可以自己定义函数。
    比如:定义getw函数
    getw(fp)
    {FILE *fp;
    char *s; int i;
    s=&i;
    s[0]=getc(fp); s =getc(fp);
    return(i);
    }
    定义putw函数
    putw(i,fp)
    {int i;
    FILE *fp;
    {char *s;
    s=&i;
    putc(s[0],fp);putc(s ,fp);
    return(i);
    }
    七、常见的文件读、写错误
    1. 使用文件时忘记打开文件。用后又忘记关闭文件,造成文件的数据丢失。
    2. 混淆文件指针与文件读/写的位置指针的概念。
    3. 不明确当前位置指针的位置,造成读/写错误。
    4. 不能使文件正确定位。
    5. 文件的打开与使用方式不匹配。
    例如,对文件以只读方式打开,却对文件进行读写,请看程序:
    if((fp=fopen("test","r"))==NULL)
    {printf("cannot open this file\n");
    exit(1);
    }
    ch=fget(fp);
    while(ch!='#')
    {ch=ch+4;
    fputc(ch,fp);
    ch=fget(fp);
    }
    以上程序段的"r"应改作"r+".

      

首页 上一页 4 5 6 7 下一页 尾页 7/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇AVL树C语言完整实现 下一篇数据格式 int与char的存储方..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)