C语言对文件的输入输出程序设计

之前很多C语言程序都是面向终端的程序,这些程序的处理对象是终端,也即我们对电脑的操作。从终端流入,依靠的是我们使用的键盘等,从终端流出,靠的是显示器、打印机等。而现在要讲到的是面向文件的C语言程序。其特点在于输入流、输出流都是相对文件进行的。

最典型的例子就是在以终端为对象时,我们有puts、gets函数。puts函数用于输出给终端,gets用于从终端获取。而以文件为对象,有类似的函数fputs、fgets、fputc、fgetc。它们的作用是在文件中获取/填入(字符/字符串)。因此对文件的处理,我们应该“换位思考”。把我们当作文件,过去如何对终端反馈,现在就应该如何对文件反馈。

现在有这样一个例子:从键盘读入若干个字符串(为简便取三个),对它们按字母的大小顺序排序,然后把排好序的字符串存入磁盘文件中。

代码及注释如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
	FILE *fp;
	char str[3][10],temp[10];
	int i,j,k,n=3;
	printf("请输入字符串\n");
	for(i=0;i<n;i++)
	{
		gets(str[i]);	//这个时候进行的还是对终端的处理,所以还是gets 
	}
	//冒泡法排序,这一段是不需要用文件相关函数的, 
	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);
		}
	}
	//下面打开文件(只写),让FILE型指针fp指向文件(这个FILE型其实是在stdio.h库中定义的结构体,使用了typedef代替),并判断文件是否成功打开
	//我们打开路径为G:\\a1.txt的已预先建立好的文件,应注意的是原本文件地址中用的是"\",但在C语言中这代表转义字符,所以应该用"\\" 
	if((fp=fopen("G:\\a1.txt","w"))==NULL)	
	{
		printf("无法打开文件,请检查!\n");
		exit(0);		//exit函数的作用是关闭所有文件,结束程序,需声明stdlib.h库才可使用 
	}
	for(i=0;i<n;i++)
	{
		fputs(str[i],fp);	
		fputs("\n",fp);		//调用fputs函数,将排好序的字符串放进指定文件中,每放完一个换行一次 
	}
	 
	return 0;
 } 

通过这个程序,我们成功的将由键盘输入的排好序的三个字符串输入了一个txt文件,如下图:
在这里插入图片描述在这里插入图片描述现在,我们要读回字符串,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
	FILE *fp;
	char str[3][10];
	int i=0;
	if((fp=fopen("G:\\a1.txt","r"))==NULL)	//打开只读文件 
	{
		printf("无法打开!\n");
		exit(0); 
	}
	while(fgets(str[i],10,fp)!=NULL)
	{
		printf("%s",str[i]);				//因为之前输入的时候有换行符在,以不需要再换行了 
		i++;
	}
	fclose(fp);								//养成好习惯,用完关闭文件,否则会造成缓冲区文件损坏(现在很多编译器会帮你做,但还是不能忘) 
	 
	return 0;
 } 

在这里插入图片描述
这样就完成了一次对文件的基础操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值