c语言写入文件方法是什么?

c语言写入文件方法是什么?,第1张

程序注意的一点,二进制和文本形式的读取区别你需要巩固,读的文件就不要以读写形式打开,养成一个好的习惯。\x0d\x0a另外一个不太重要的一点,id确实很少作为int类型的,因为有些id会很长,比如10位20位,这样int就存不下了,而用char数组存的话只需要10个字节20个字节就能存下,对于每一位也好比较。\x0d\x0a#include \x0d\x0a#include \x0d\x0atypedef struct student\x0d\x0a{\x0d\x0a int unsigned id\x0d\x0a float score [3]\x0d\x0a float rank\x0d\x0a}Student\x0d\x0a\x0d\x0aint main ()\x0d\x0a{\x0d\x0a Student s\x0d\x0a FILE * fp\x0d\x0a fp=fopen("C:\\f11.txt","r")//尽量以可读方式打开\x0d\x0a if (!fp)\x0d\x0a {\x0d\x0a printf("file cannot be opened")\x0d\x0a exit(1)\x0d\x0a }\x0d\x0a //fscanf(fp,"%d %f %f %f",&s.id,&s.score[0],&s.score[1],&s.score[2])这一行拿到下面while语句里面\x0d\x0a //fprintf(stdout,"%g",s.score[2]) \x0d\x0a FILE * fw\x0d\x0a fw=fopen("C:\\f11a.txt","w")//注意wb是以2进制形式打开文件,还有目录的格式\x0d\x0a if (!fw)\x0d\x0a {\x0d\x0a printf("file cannot be opened")\x0d\x0a exit(1)\x0d\x0a } \x0d\x0a\x0d\x0a while(!feof(fp))\x0d\x0a {\x0d\x0a fscanf(fp,"%03d%f%f%f",&s.id,&s.score[0],&s.score[1],&s.score[2])\x0d\x0a s.rank=(s.score[0]+s.score[1]+s.score[2])/3\x0d\x0a fprintf(fw,"%03d\t%.1f\t%.1f\t%.1f\t%.1f\n", s.id, s.score[0], s.score[1], s.score[2], s.rank)//尤其注意fprintf和fwrite不同,fwrite是以二进制形式写文件,如果用fwrite的话将会显示乱码,fwrite和fread配套,fscanf和fprintf配套\x0d\x0a }\x0d\x0a\x0d\x0a fclose (fp)\x0d\x0a fclose(fw)\x0d\x0a return 0\x0d\x0a}

文件

文件的分类:

按照用户角度分:

①设备文件:如显示器(printf)标准输出文件;键盘(scanf)标准输入文件

②普通文件:存放在磁等介质上的文件

按照文件的逻辑结构上分:

①记录文件(有定长记录、不定长记录两种)

②流式文件(由字符数据顺序组成如c语言程序)

按照文件的编码方式:

①文本文件(又称ascii文件,每个字节存放一个ascii码)(.c、.cpp、.h、.txt、.ini、)(常见的有五种)

②二进制文件(binary file)

文件 *** 作函数:

一、文件的打开:文件指针名=fopen(“path\文件名”,“打开文件方式”)

“文件打开方式”:

rt-只读打开文本文件

wt-只写打开文本文件

at-追加打开文本文件,并在末尾写数据。

rb-只读打开二进制文件

wb-只写打开二进制文件

ab-追加打开二进制文件,并在末尾写数据。

rt+-读写打开文本文件,允许读写

wt+-读写打开或建立一个文本文件,允许读写。

at+-读写打开一个文本文件,允许读或在文件末尾追加数据。

rb+-读写打开二进制文件,允许读写

wb+-读写打开或建立一个二进制文件,允许读写。

ab+-读写打开一个二进制文件,允许读或在文件末尾追加数据。

r+w:可读写文件(具体是二进制文件还是文本文件要看打开文件的扩展名而定)

例如:fp=fopen(“C.dat”,“w+b”)

文件打开模式只有r、w、a、t、b、+、这六个字符拼成。

w:用w打开的文件只能向该文件写入数据(更准确是建立一个新的文件)(即将 信息从程序写入磁盘中)

a:用a打开对我文件只能向已存在的文件中追加信息

①对于文本文件应注意:从程序中读入内存时,要将ASCII码转换成二进制码;而 把文件以文本形式写入磁盘时,要将二进制码转换为ASCII码。

②fopen函数将返回一个文本文件结构的指针(该文件不存在时,返回NULL)

文件的关闭:fclose(fp);(作用强制性将存放在缓中的未满的数据写入到磁盘中,然后释放文件指针,使其真正写入磁盘中)

fclose(fp)关闭成功时返回0,失败时返回EOR

文件的读写:

读字符函数— fgetc()

调用格式:字符变量=fgetc(文件指针(fp));

函数说明:

读字符时,文件必须以“读”或者“读写”的方式打开

读取的结果也可以不向字符变量赋值。例如fgetc(fp)

每读一个字符文件内部指针向前移动一个字符(文件内部指针不是文件指针,文件内部直镇不需要程序中定义说明由系统自动设置)

返回值:fgetc(fp):成功时函数返回读入的一个字符,若读到文件尾时或者出错时,返回值为“EOF”。

写字符函数—fputc()

调用格式:fputc(字符量(常量或者变量),文件指针(fp))

函数说明:

写字符时,文件可以用“写”“读写”“追加”的方式打开文件

写或者是读写的方式打开文件时,原有的内容将会被清除,从文件首部开始写入字符;若以追加的方式打开文件时,将在文件末尾开始写入字符。

函数的返回值:写入成功时,返回写入的字符;失败时,则会

返回“EOF”

每写入一个字符,“文件内部位置指针”向后移动一个字符

读字符串函数—fgets()

调用格式:fgets(字符数组名,n,文件指针(fp))

函数说明:

N是一个正整数,表示从文件中读取的字符串不超过N-1个字符。

读入最后一个字符后加上字符串结束标志'\0'.

读取过程中,遇到换行或者文件结束标志“EOF”(end of file)时,读取字符串结束。

写字符串函数—fputs()

调用格式:fputs(字符串量,文件指针)(字符串量,即可是字符串变量(c中为字符数组),由可是字符串常量)

函数说明:无

///////////////////////////////////////////////////////////////--这部分有点小问题(程序运行不了)

读数据块函数—fread()

调用格式:fread(p,size,n,fp)

函数说明:

P:指向输入/输出数据块的首地址的指针

Size:某类型数据存储空间的字节数(数据项大小)

N:此次从文件中读取的数据项数

Fp:文件指针变量

写数据块函数—frite()

调用格式:fread (p,size,n,fp)

函数说明:

P:指向输入/输出数据块的首地址的指针

Size:某类型数据存储空间的字节数(数据项大小)

N:此次从文件中读取的数据项数

Fp:文件指针变量

注意:fread、fwite函数在调用成功时,函数返回值为n的值,即输出的项数;如果失败,则返回(0)。

主要是两种文件类型:1)文本文件,2)二进制文件。

一般来说,人类可读的文件都作为文本文件,例如一片文章。其余都作为二进制文件,例如一个程序。

在C语言中,文件的 *** 作是通过FILE结构体进行了,利用fopen返回一个指向FILE结构体的指针,在使用fopen函数过程中,使用mode控制符对是否打开哪类文件进行控制:

FILE *fopen( const char *filename, const char *mode )

filename:文件名,mode:打开的模式,规定了是可读、可写、追加之类的属性。

r 以只读方式打开文件,该文件必须存在。

r+ 以可读写方式打开文件,该文件必须存在。

rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

wb 只写打开或新建一个二进制文件;只允许写数据。

wb+ 读写打开或建立一个二进制文件,允许读和写。

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

如果调用失败,返回一个空指针。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/tougao/8139730.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存