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

Posted 我是一颗大萝北

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 按字符输入

以上是关于C语言fputs fgets fputc fgetc fscanf fprintf及fopen操作的整理的主要内容,如果未能解决你的问题,请参考以下文章

C语言 文件读写 fputs 函数

c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

C-字符数组的存储, 字符指针,  fputs, fgets

C语言文件操作详解

C语言文件操作详解

C语言文件操作详解