C语言fputs fgets fputc fgetc fscanf fprintf及fopen操作的整理

最近写了一些文件操作的程序,频繁使用下面的函数。所以整理一下。

一、fopen函数

fopen函数的一般用法

FILE *f;
if((f=fopen("1.txt","这里写文件操作"))==NULL){  
		printf("Open file failed\n");
	}

1.以只读方式打开文件。fopen第二个参数为r。要求文件“1.txt”必须存在,不存在的话只读方式不会帮你创建的

FILE *f;
if((f=fopen("1.txt","r"))==NULL){  //打开只读文件
		printf("Open file failed\n");
	}

2.创建一个空文件。fopen第二个参数为w。也就是说,以只写方式打开可以创建一个名为“1.txt”的空文件

FILE *f;
if((f=fopen("1.txt","w"))==NULL){  //创建一个空文件
		printf("Open file failed\n");
	}

3.清空“1.txt”文件的内容,并且从头开始写。同样,fopen第二个参数为w

FILE *f;
if((f=fopen("1.txt","w"))==NULL){  
		printf("Open file failed\n");
	}

4.不想清空原来有内容的文件,希望从文件的末尾开始追加新内容。fopen第二个参数为a

FILE *f;
if((f=fopen("1.txt","a"))==NULL){  //创建一个空文件
		printf("Open file failed\n");
	}

注意:

如果你的程序向文件中写不进去东西,就来看一下fopen的参数是否使用错了。如果用fopen(“1.txt”,“r”)打开一个只读文件,当然写不进去。

二、读文件、写文件函数

1.fputs 按行输入

(1)一般用fputs函数都是希望在原文件后面再加几行,所以打开方式是“a”

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char buf[51];
int main(){

	FILE *f;
	if((f=fopen("cpp.txt","a"))==NULL)  //追加方式
		printf("文件打开失败!");
		exit(0);
	}
	char buf[30]="Hello World!";
   	fputs(buf,f);  //在文件末尾追加一行
    fclose(f);
	return 0;
}

2.fgets 按行读文件

(1)首先要定义一个缓冲区char buf[51],且必须是char数组,不能是char *
(2)fgets函数返回的类型是char * ,所以用NULL判断是否读到文件末尾
(3)估摸着文件一行最多多少字符,就把fgets的第二个参数设置比最多字符数多一点。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char buf[51];
int main(){

	FILE *f;
	if((f=fopen("cpp.txt","r"))==NULL)  //只读方式
		printf("文件打开失败!");
		exit(0);
	}
    while(fgets(buf,50,f)!=NULL)//fgets返回NULL时 ,读到文件末尾 
   {
   	 printf("%s",buf);
     
   } 
    fclose(f);
	return 0;
}

3.fprintf 格式化按行输入

(1)和fputs的用法几乎一模一样
(2)如果你需要格式化输入一行的话,就用这个函数吧;否则用fputs足以

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char buf[51];
int main(){

	FILE *f;
	if((f=fopen("cpp.txt","a"))==NULL)  //追加方式
		printf("文件打开失败!");
		exit(0);
	}
	char id[30]="222";
	char name[30]="222";
	char score[30]="222";
  	fprintf(f,"%s %s %s \n",id,name,score); //格式化写入
    fclose(f);
	return 0;
}

4.fscanf 按行从文件中读,并格式化

(1)这个函数比较有用。如果文件中格式工整,比如说每一行是按照 char类型 int类型 char类型 char类型 这样排列的,我用fgets函数读出来这一行,就把这一行全变成一个字符串了,但用fscanf函数可以分别得到char类型 int类型 char类型 char类型 的每个变量,便于后续处理
(2)返回值是int型,所以用EOF判断是否读到文件末尾

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(){
	FILE *f;
	char name[20];
	char id[20];
	char score[20];
	int flag=0;
	if((f=fopen("score.txt","r"))==NULL){  //打开只读文件 
		printf("Open file failed\n");
		return;
	}

	while(fscanf(f,"%s %s %s",id,name,score)!=EOF){ //fscanf的返回值是int 
			printf("%s %s %s",id,name,score);
		} 	
}

5.fgetc 按字符读文件

(1)一个字符一个字符的读入,并且会自动略过换行符

6.fputc 按字符输入

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值