C语言文件输入输出函数总结

总结一下文件输入和输出常用函数用法并未

总结:
fopen,getc,fgetc,putc,fputc,exit,fclose,fprintf,fscanf,fgets,fputs,puts,rewind,fseek,ftell,fflush,fgetpos,fsetpos,feof,ferror,ungetc,setvbuf,fread,fwrite函数用法。

偷偷给图片换个皮,要是被某人抓到了,那就是抓到我了

并未
fopen用法:
FILE *fp;fp=fopen(“1.txt”,“r+”);

这里说一下w和w+的区别:
w只能写不能读,w+可读可写,用w就不能读取写入文件内容,w+就可以,a+同理,r+同理

getc()和fgetc用法:
在C语言中,用函数getc(fgetc)从文件读取字符。getc、fgetc用法相同。

getc的调用形式:
ch=getc(fp);

此处的fp是文件指针,
函数功能是从文件指针指向的文件读入一个字符,并把它作为函数值返回给字符型变量ch。
#include <stdio.h>
int main(){
char c;c = getc(stdin);//fgetc和getc一样,但是getc是优化最好的函数,它是由宏定义的
printf("%c",c);
return 0;
}
函数从输入流当前位置返回下一个字符,并将文件位置指示器增大。该字符作为一个无符号字符读取,并被转换成为一个整型值。如果到了文件的结尾或遇到读错误,将返回EOF。由于EOF是一个有效的整型值,当你操作二进制文件时,必须用feof函数进行文件结束检测。同样也必须使用ferror函数进行出错检查。

(fputc)putc函数用法

int putc(int ch, FILE * fp);

把ch数值对应的ASCII码输出到fp里,fp可以是stdout或文件putc返回ch的值fputc和putc完全相同

exit用法:
exit() ;
结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束。
return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。

在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值。

exit(0)表示进程正常退出. 返回 0.exit(1)和exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件。

fclose用法:

FILE *fp=fopen(“1.txt”,“r+”);
fclose(fp)//此时以关闭文件1.txt关闭打开的文件,成功关闭返回ture,失败返回false

fprintf和fscanf用法:

int i=5;
fprintf(stdout,“666%d”,i);

此时屏幕打印6665,如果stdout换成文件指针(比如指向文档的fp文件指针)这句话就被写到文件里了

char ch;

fscanf(stdin,"%c",&ch)//此时和scanf用法相同,如果把stdin换成文件指针,就是从文件读取字符(千万不要用%s,会导致内存溢出)

fgets用法:

char ch[60];
fgets(ch,60,stdin);
从键盘获取60-1个字符,如果遇到换行符把换行符储存在数组里然后结束输出,stdin换成文件指针可以从文件读取。

fputs用法:

fputs(ch,stdout);

打印字符串ch到屏幕,如果stdout换成文件指针则输出到文件里,fputs不会在字符串后面加换行符,puts会在后面加换行符,puts和fputs用法一样。

rewind和fseek,ftell用法:

此时1.txt文档内有这样一组数据:123456789

FILE *fp=fopen(“1.txt”,“r+”);
fseek(fp,1L,SEEK_SET);
//执行完这条代码fp就指向数字2了

fseek(fp,2l,SEEK_CUR);
//此时fp指向4

fseek(fp,0l,SEEK_END);
//此时fp指向9

long le;
le=ftell(fp);
//执行完这条代码le的值为9

rewind(fp);
//此时缓冲区指针指向1,上面说fp意思也是缓冲区指针。

其中fseek函数的第一个参数是打开文件的指针,第三个参数表示指向文件何处,
如果是SEEK_SET指针指向文件内容开头,
如果是SEEK_CUR则指向当前指向文件内容的位置,保持不变,
如果是SEEK_END则指向文件末尾。

第二个参数是long型的,为偏移量,
如果是0l文件指针指向文件内容保持原位,
如果-3l文件指针则向前移动三位,
如果是3l文件指针则向后移动3位(如果到文件末尾了,继续向后移动也是可以的,至少我的编译器Dev-C++是可以的,但是fp此时就指向-1了,表示EOF)

fflush用法:
//接上代码片段

fflush(fp);
//把所有在缓冲区要写入的数据发送到fp指定的文件(刷新缓冲区),如果fp是空指针,所有输出缓冲区都被刷新(可能包含自建的,我也不知道咋看缓冲区状态,做题时候试试),输入流还没被定义(不用就行了,只要上一次操作不是输入,就可以用)

fsetpos和fgetpos用法(这里有个新类型,fpos_t类型):
FILE *fp;
fpos_t position;
fp = fopen(“file.txt”,“w+”);
fgetpos(fp, &position);
//获取fp指向位置,返回给position,执行完position=0,成功执行后函数返回0,失败返回非0值

fputs(“Hello, World!”, fp);
fsetpos(fp, &position);
//执行完这条语句fp又指向文件开头了,如果成功执行返回0,失败返回非0的值。
这里position是可以被定义的,
比如position=2,
如果一个文档内容为123456,
fsetpos(fp,&position);
此时fp指向数字3(开始指向的是数字1)

feof和ferror用法:

FILE *fp=NULL;
char c;
fp=fopen(“myfile.txt”,“r”);
while(!feof(fp)) {
c = fgetc(fp);
printf("%c:\t%x\n",c,c);
if(!ferror(fp)){
printf(“读取出错”);
}
}
//feof识别文件指针是否指向结尾,如果指向结尾返回非0,如果未指向返回0,因为getc和fgetc不一定返回EOF就是读取到末尾了,所以用这个函数区分是否到结尾
//ferror同理,如果读取错误,返回非0,成功读取文件返回0。

ungetc用法:
char n,i;
scanf("%c",&i);
ungetc(i,stdin);
scanf("%c",&n);
putchar(i);
putchar(n);
//当输入一个w时,会直接显示两个w,第一个w是第一个scanf读取了从键盘上输入的w储存给了i,然后ungetc把w再放进缓冲区,等于你又输入了一个w。

大概就像这样:
有三个杯子分别是1 2 3 ,2和3个杯子是空的,
1号杯子有红酒,把1号的酒倒进了2号,
然后调用ungetc函数之后,
2号把自己的酒复制了一份,复制为2+,
把酒2+倒回到一号杯子里,这样1号和2号就都有酒了,
但是1号的工作是把自己杯子里的就分配给2号和3号,如果没有调用ungetc函数,
2号满了,3号空着,
1号就要从酒厂继续倒酒,然后再倒给3号,
现在调用完ungetc函数,1号又有酒了,
1号就把酒倒给了3号,1号就不用去酒厂进酒了。

这就是ungetc函数用法

setvbuf用法:

FILE *fp;
char ch[512];
fp=fopen(“1.txt”,w);
if(setvbuf(fp,ch,_IOFBF,512)!=0){
puts(“创建缓冲区失败”);
exit(-1);
}
//此时ch为fp文件的缓冲区,ch这个数组内容也是可以访问的,读取或写入都可以用,当你把缓冲区内某个字符改变,那么输出或写入内容也会改变。

如果是这样:
setvbuf(fp,null,_IOFBF,512);
就自动创建一个缓冲区了,
setvbuf作用就是创建缓冲区,

_IOFBF为全缓冲,就是填满缓冲区才写入文件,
_IOLBF为行缓冲,写入一个换行符或者填满缓冲区才写入文件,
_IONBF表示无缓冲,写入什么就立即写到文件内

函数成功执行返回0,执行失败返回非0值

fread和fwrite用法:
int a[10], b[10];
int i, size = sizeof(int);
FILE *fp;
if( (fp=fopen(“demo.txt”, “rb+”)) == NULL ){
puts(“Fail to open file!”);
exit(0);
}
//从键盘输入数据 并保存到数组a

for(i=0; i<10; i++){
scanf("%d", &a[i]);
}

//将数组a的内容写入到文件

fwrite(a, size, 10, fp);

//将文件中的位置指针重新定位到文件开头 rewind(fp);

//从文件读取内容并保存到数组b
fread(b, size, 10, fp);

介绍:
fread(buffer, size, count, fp);

其中:buffer是存放数据的存储空间的起始地址;size是数据块的大小(字节数);
count是读多少个块;
fp是文件类型指针。
fread函数的功能是:从fp所指向的文件中读取数据块,
读取的字节数为size*count,
读取来的数据存放在buffer为起始地址的内存中。
若fread函数的返回值等于count,
则执行本函数读取数据成功;
若文件结束或发生错误,返回值等于0。

fwrite(buffer, size, count, fp);

其中四个参数的含义与fread函数基本相同,只不过现在是将内存中从buffer地址开始的数据往fp所指向的文件里写。

fwrite函数的的功能是:将内存中从buffer地址开始的数据往fp所指向的文件里写,写入到文件里的字节数为size*count。

如果觉得文档有用就转发点赞➕关注呗

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值