C文件编程分析

在这里插入图片描述

/*程序功能:将字符串str中的小写字符转换成大写字符
将转换成的大写字符写入文件text.doc的末尾(text.doc原来的内容保持不变)
最后分别显示text.doc的全部内容和新写入的内容*/
#include<stdio.h>
#include<stdlib.h>
main()
{	FILE *fp;int n=0,k=0;char ch;char str[]="abcdABCDefgEFG";/*15个字节*/
	if((fp=fopen("text.doc","a+"))==NULL)/*为什么这么写*/
	{	printf("不能打开文件\n");
		exit(0); 
	}	
	while(str[n])
	{	if((str[n]>='a')&&(str[n]<='z'))
			{	ch=str[n]-32;
				fputc(ch,fp);/*将字符写入到fp所指向的文件中*/
				k++;
			}
		n++;
	}
	rewind(fp);/*将文件内部的位置指针重新定位到文件首部*/
	while(!feof(fp))/*文件结束检测,判断文件是否处于文件结束的位置,若是返回1,否则返回0*/
	{	putchar(fgetc(fp));/*先是从fp所指向的文件中读取1个字符,接着在屏幕上显示*/
	}
	fseek(fp,-k,SEEK_END);
	while(!feof(fp))
	putchar(fgetc(fp));
	fclose(fp);
 } 

程序分析:
① if((fp=fopen(“text.doc”,“a+”))==NULL)/为什么这么写/
② fputc(ch,fp);/将字符写入到fp所指向的文件中/
③ rewind(fp);/将文件内部的位置指针重新定位到文件首部/
④ while(!feof(fp))/文件结束检测,判断文件是否处于文件结束的位置,若是返回1,否则返回0/
⑤ putchar(fgetc(fp));/先是从fp所指向的文件中读取1个字符,接着在屏幕上显示/
⑥ fseek(fp,-k,SEEK_END);
起始点是?SEEK_END(文件尾)
移动的位移量是?-k。k是小写字符的个数,值为7;负号 “-” 表示向左移动。移动的字节数,这个数可以是正的,就是向后(文件尾部)移动,也可以是负的,即向前(文件头部)移动
文件位置指针指向谁?文件位置指针指向的文件是 text.doc 。而现在 text.doc 里的内容是 ABCDEFG’\0’。位置指针从文件尾部开始,向左移动7个字节,即位置指针移动到离文件尾7字节处,此时位置指针指向 text.doc 中数据A。
总结:
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针移动到离文件结尾100字节处。
⑦while(!feof(fp))
putchar(fgetc(fp));然后循环输出字符将从fp所指向的文件的第一个字符A开始,直到feof(fp)判断文件是否处于文件结束的位置,若是返回1,否则返回0,当fp指向text.doc 文件中数据‘\0’时,feof(fp)判断text.doc 文件处于文件结束的位置’\0’,因此返回0,循环输出结束。依次输出ABCDEFG。
⑧分析结束
⑨我学到了什么?
⑩以上分析的过程就是我所学到的。

猜你喜欢

转载自blog.csdn.net/YJG7D314/article/details/89040374