今天刚开通博客,正好今天在群里看了下别人的疑问,关于c语言"只读(r)"的含义:为写入数据,打开一个已经有的文本文件!
然后回头看了看书,自己总结了下关于c文件的读取与写入!
“读”:使用文件过程,程序从外部介质(如硬盘)“读”或"取“数据!通常称为”读入“!
”写”:创建文件过程,程序运行的保存数据到外部介质(如硬盘)!通常称为“写出”!
总结:是计算机与程序之间数据转换的读入与写出,非人与程序!把自己当机器就可以了!
为了熟悉,顺便看了个文件程序:
1.源程序
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
FILE *fp;
char name[]="E:\\file2.txt";
char ch;
if(fp=fopen(name,"r"))=NULL){
printf("Error opening file %s\n",name);
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF){
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}
当运行完源程序的时候,能看到结果,但总感觉少了点什么,很乏味的看到原文本的内容,决定加个数组,一方面从文本的读入的数据显示出来,另一方面存入数组中的数据显示出来!
该后程序:
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
FILE *fp;
char str[35];
int i=0,len; ’初始化i值,len用来存放字符串数据组str的使用长度
char name[]="E:\\1.txt"; '这里是根据我自己存放文本的路径
char ch;
if ((fp=fopen(name,"r"))==NULL){
prinft("Error opening file %s!\n",name);
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF){
putchar(ch);
ch=fgetc(fp);
str[i++]=ch;
}
fclose(fp);
printf("\n"); '运行换行,TC编译器不自己换行
len=strlen(str);
prinft("%d",len);
for(i=0;i<len;i++)
prinft("%c",str[i]);
}
当运行程序的时候,发现这并不是我要的结果,因为存入数组后第一个数不见了,加入strlen是为了查看数组的使用长度;经过分析,发现第一个字符没有加入到数组中!
因为:while前面有句 ch=fgetc(fp);
所以后面加了句:str[i]=ch; 这里就是初始化i的好处,此时i=0,并不影响循环
把后面的语句str[i++]=ch改成str[++i]=ch,那么1.txt的内容就完全进入数组了!
以上是在下新学的东西,代码粗陋,望高手不要耻笑,若有错误的地方,望指教!