设为首页 加入收藏

TOP

第10章 对文件的输入输出(五)
2019-06-27 00:06:03 】 浏览:345
Tags:文件 输入 输出
、字符数组名或字符型指针。字符串末尾的′\0′不输出。若输出成功,函数值为0;失败时,函数值为EOF(即-1)。

说明:

fgets和fgets这两个函数的功能类似于gets和puts函数,只是gets和puts以终端为读写对象,而fgets和fputs函数以指定的文件作为读写对象。

[例] 从键盘读入若干个字符串,对它们按字母大小顺序排序,然后把排好序的字符串送到磁盘文件中保存

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{ FILE*fp;

char str[3][10],temp[10];

//str是用来存放字符串的二维数组,temp是临时数组

int i,j,k,n=3;

printf("Enter strings:\n"); //提示输入字符串

       for(i=0;i<n;i++)

gets(str[i]);   //输入字符串

for(i=0;i<n-1;i++)   //用选择法对字符串排序

{ k=i;

for(j=i+1;j<n;j++)

if(strcmp(str[k],str[j])>0) k=j;

if(k!=i)

{ strcpy(temp,str[i]);

strcpy(str[i],str[k]);

strcpy(str[k],temp);}

}

if((fp=fopen("D:\\CC\\string.dat","w"))==NULL) //打开磁盘文件

//′\′为转义字符的标志,因此在字符串中要表示′\′用′\\′

{

printf("can′t open file!\n");

exit(0);

}

printf("\nThe new sequence:\n");

for(i=0;i<n;i++)

{ fputs(str[i],fp);fputs("\n",fp);

//向磁盘文件写一个字符串,然后输出一个换行符

printf("%s\n",str[i]);  //在屏幕上显示

}

return 0;

}

运行结果:

 

[例] 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。(可以编写出以下的程序,从文件string.dat中读回字符串,并在屏幕上显示)

#include <stdio.h>

#include <stdlib.h>

int main()

{ FILE*fp;

char str[3][10];

int i=0;

       if((fp=fopen("D:\\CC\\string.dat","r"))==NULL)    //注意文件路径必须与前相同

{

printf("can′t open file!\n");

exit(0);

}

while(fgets(str[i],10,fp)!=NULL)

{ printf("%s",str[i]);

i++;

}

fclose(fp);

return 0;

}

运行结果:

 

10.3.3 用格式化的方式读写文本文件

可以对文件进行格式化输入输出,这时就要用fprintf函数和fscanf函数。

说明:

从函数名可以看到,它们只是在printf和scanf的前面加了一个字母f。它们的作用与printf函数和scanf函数相仿,都是格式化读写函数。只有一点不同: fprintf和fscanf函数的读写对象不是终端而是文件

它们的一般调用方式为:

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

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

使用方式如下:

fprintf (fp,″%d,%6.2f″,i,f); //将int型变量i和float型变量f的值按%d和%6.2f的格式输出到fp指向的文件中

fscanf (fp,″%d,%f″,&i,&f);

//磁盘文件上如果有字符“3,4.5”,则从中读取整数3送给整型变量i,读取实数4.5送给float型变量f

10.3.4 用二进制方式向文件读写一组数据

说明:

C语言允许用fread函数从文件中读一个数据块,用fwrite函数向文件写一个数据块。在读写时是以二进制形式进行的。在向磁盘写数据时,直接将内存中一组数据原封不动、不加转换地复制到磁盘文件上,在读入时也是将磁盘文件中若干字节的内容一批读入内存。

一般调用形式为:

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

解释:

buffer:是一个地址。对fread,它是用来存放从文件读入的数据的存储区的地址。对fwrite,是要把此地址开始的存储区中的数据向文件输出(以上指的是起始地址)

 

size:要读写的字节数

 

count:要读写多少个数据项(每个数据项长度为size)

 

fp:FILE类型指针

使用例子如下

float f[10];

fread(f,4,10,fp); //从fp所指向的文件读入10个4个字节的数据,存储到数组f中

[例] 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。

#include <stdio.h>

#define SIZE 10

struct Student_type

{ char name[10];

int num;

int age;

char addr[15];

}stud[SIZE]; //定义全局结构体数组stud,包含10个学生数据

 

void save() //定义函数save,向文件输出SIZE个学生的数据

{ FILE *fp;

int i;

if((fp=fopen("stu.dat","wb"))==NULL) //打开输出文件stu.dat

{ printf("cannot open file\n");

return;

}

for(i=0;i<SIZE;i++)

if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)

printf("file write error\n");

fclose(fp);

}

 

int main()

{ int i;

printf("Please enter data of students:\n");

       for(i=0;i<SIZE;i++)

//输入SIZE个学生的数据,存放在数组stud中

sc

首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇leadcode的Hot100系列--序 下一篇第9章 用户自己建立数据类型

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目