C语言文件典例程序分析

在这里插入图片描述

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
main() 
{	FILE *fp;char str[81];
	if((fp=fopen("text.doc","w"))==NULL)
	{	printf("can not open file\n");
		exit(0);
	}
	while(strlen(gets(str))>0)
	{	fputs(str,fp);/*把一个字符串写到一个文件中去('\0'不会写入)*/
		fputs("\n",fp);
	}
	fclose(fp);
}

分析程序:
gets函数作用是从键盘上输入一个字符串可以没有空格,也可以有多个空格
同样从键盘上的到字符串,使用gets函数与常用的scanf函数得到的结果却不完全相同
scanf()中通过%s输入的字符串不能含有空格
strlen()函数用来计算字符串长度,即字符串包含的有效字符个数(即不包含’\0’)
本程序的功能是:首先从键盘输入一系列字符,(在新的一行按回车表示结束),接着把它们写到文本文件text.doc中。

在这里插入图片描述
程序分析:
问题1:运行结果是什么?
问题2:若将fp=fopen(“temp”,“w+”)换成fp=fopen(“temp”,“w”)程序是否可以正常运行?若不能,为什么?

**首先,**程序中用带到fprintf函数,其格式为fprintf(文件指针,“格式控制符”,输出表列);其功能是把输出列表中的指定的值以指定的格式写入由fp所指定的文件中去。

本程序fprintf(fp,"%3d",i); 的作用是把指定的变量i的值以%3d的格式写入由fp所指定的文件temp中。此时,temp文件中的内容是 1 2 3 4 5 6 7 8 9(数与数之间空两列)

接着,本程序出现fseek函数,其格式为fseek(文件指针,位移量,起始点),其含义是移动位置指针,从起点开始,移动的字节数由参数位移量决定,当用常量表示位移量时,要求必须加后缀L.!!!本程序中,fseek(fp,i3L,SEEK_SET);起始点是SEEK_SET(文件首),移动位移量是i3L,i是循环变量,初值为5,第一次位置指针就从文件首开始,移动15字节,即位置指针指向temp文件中数据5的后一列。

再接着,程序又用到fscanf函数,其形式是fscanf(文件指针,“格式控制符”,输入列表);其功能是从fp所指向的文件中按指定格式读取数据,送入到输入列表中。本程序中fscanf(fp,"%3d",&n);的作用是,是从temp文件中按%3d的格式读取数据送给变量n。当前位置指针定位到数据5的后一列。此时,按%3d格式读取数据6送到变量n,接着屏幕上显示n的值,即为6,循环4次,即输出 6 7 8 9.

**最后,**fopen(“temp”,“w+”);函数中文件的使用方式是w+,其含义是以读/写的方式打开或建立一个文本文件,允许读或写。若将fopen(“temp”,“w+”);换fopen(“temp”,“w”);程序将出错。因为换之后只能想文件中写数据,不也能从文件中读数据,导致fscanf函数不能正确运行。

综上分析:
问题1: 6 7 8 9
在这里插入图片描述
问题2:不能,因为w只能写不能读,会导致fscanf函数不能正确运行。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YJG7D314/article/details/89036964
今日推荐