fprintf 函数和 fscanf函数\putw 和 getw函数\ fgets 函数和 fputs 函数\读写其他类型数据

fprintf 函数、fscanf 函数与printf函数、scanf 函数作用相仿,都是格式化读写函数。只有一点不同:fprintf和 fscanf函数的读写对象不是终端而是磁盘文件。它们的一般调用方式为

fprintf(文件指针,格式字符串,输出表列);

 fscanf (文件指针,格式字符串,输入表列);

例如:

fprintf(fp,"%d,%6.2f",i,t);

它的作用是将整型变量i和实型变量t的值按%d和%6.2f的格式输出到fp指向的文件上。如果i=3,t=4.5,则输出到磁盘文件上的是以下的字符串:

3, 4.50

同样,用以下fscanf函数可以从磁盘文件上读入ASCII字符:

 fscanf(fp,"%d,%f",&i,&t);

磁盘文件上如果有以下字符:

3,4.5

则将磁盘文件中的数据3送给变量i,4.5送给变量t。

用fprintf 和 fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将 ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf 和 fscanf函数,而用fread和 fwrite函数。

1. putw 和 getw函数

大多数C编译系统都提供另外两个函数:putw和getw,用来对磁盘文件读写一个字(整数)。例如:

putw(10,fp);

它的作用是将整数10输出到fp指向的文件。而

i=getw(fp);

的作用是从磁盘文件读一个整数到内存,赋给整型变量i。

如果所用的C编译的库函数中不包括putw和getw函数,可以自己定义这两个函数。putw函数如下:

putw (int i,FILE *p)

{char *s;

s=&i;

putc(s[0],fp);

putc(s[1],fp);

 return(i);

}

当调用putw函数时,如果用“putw(10,fp);”语句,形参i得到实参传来的值10,在 putw 函数中将i的地址赋予指针变量s,而s是指向字符变量的指针变量,因此s指向i的第1个字节,s+1指向i的第2个字节。由于*(s+0)就是s[0],*(s+1)就是s[1],因此,s[0]、s[1]分别对应i的第1字节和第2字节。顺序输出s[0]、s[1]就相当于输出了i的两个字节中的内容。见图13.3。

getw函数如下:

getw(FILE *fp)

{char*s:

inti;

s=char*&i /*使s指向i的起始地址*/

s[0]=getc (fp);

 s[1]=getc(fp);

 return (i);

}

putw 和getw并不是ANSIC标准定义的函数。但许多C编译都提供这两个函数,但有的C编译可能不以putw和 getw命名此两函数,而用其他函数名,请用时注意。

2.读写其他类型数据

如果用ANSIC提供的fread 和fwrite函数,读写任何类型数据都是十分方便的。如果所用的系统不提供这两个函数,用户只好自己定义所需函数。例如,可以定义一个向磁盘文件写一个实数(用二进制方式)的函数putfloat:

putfloat (float num ,FILE * fp)

{char * s;

int count;

s=(char *)#

for(count=0;count<4;count++)

putc(s[count].fp);

}

同样可以编写出读写任何类型数据的函数。

3. fgets 函数和 fputs 函数

fgets 的作用是从指定文件读入一个字符串。如:

fgets(str,n,fp);

n为要求得到的字符,但只从fp指向的文件输入n-1个字符,然后在最后加一个'\0’字符,因此得到的字符串共有n个字符,把它们放到字符数组str中。如果在读完n-1个字符之前遇到换行符或EOF,读入即结束。fgets函数返回值为str 的首地址。

fputs 函数的作用是向指定的文件输出一个字符串。如:

 fputs("China",fp);

把字符串“China”输出到fp指向的文件。fputs函数中第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的'\0’不输出。若输出成功,函数值为0;失败时,为EOF。

这两个函数类似以前介绍过的gets 和puts函数,只是fgets和fputs函数以指定的文件作为读写对象。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光向日葵之沈阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值