关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

确定不进来看看吗?详细讲解C语言文件操作(示例分析每个函数)(中)

发布时间:2023-06-27 01:00:10

4.1 文件的顺序读写


对于输入\输出函数的简单示例:


4,11 fputc函数


函数功能: fputc函数,按单个字符输出到流.


函数模型:



参数介绍:,


参数含义
character要输入的字符(整形是因为会转化为ASCII码值)
stream指向要输出到的流


‘w’,(只写)从内存写/输出数据到文件中


示例:


向文件写入26个小写英文字母,空格分隔


#includeint main() {  FILE* pFile;  //打开文件  pFile = fopen("123.txt", "w");  if (pFile != NULL)  {  for (char i = 'a'; i <= 'z'; i++)  {  fputc(i, pFile);//从内存中写到流  fputc(' ', pFile);//写入空格字符  }  }  else  {  printf("打开失败");  return 1;//返回非0  }  //关闭文件  fclose(pFile);  return 0; }

   


//123.txt a b c d e f g h i j k l m n o p q r s t u v w x y z

   


4.12 fgetc函数


函数功能: fgetc从流中读入数据到内存


函数模型


参数含义
stream指向标识输入流的 FILE 对象的指针。


‘r’,(只读),从文件中读数据到内存


示例:


#includeint main() {  FILE* pFile;  char c;  pFile = fopen("123.txt", "r");//此时123.txt中已经有26个字母了  if (pFile != NULL)  {  while ((c=fgetc(pFile))!=EOF)//从流中写读到内存,直到文件读取结束  {  printf("%c",c);  }  }  else  {  printf("打开失败");  return 1;//返回非0  }  //关闭文件  fclose(pFile);  return 0; }

   


运行结果:



4.13 fputs函数


函数功能: fputs将 str 指向流的 C 字符串写入流。


函数模型:



函数参数:


参数含义
str要输入的字符串
stream指向标识输出流的 FILE 对象的指针。


注意:


该函数时按行进行写入字符串.可以在写数据时在后面增加一个换行符,会更加美观.


示例:


#includeint main() {  FILE* pFile;  char c;  pFile = fopen("123.txt", "w");//此时123.txt中已经有26个字母了  if (pFile != NULL)  {  fputs("Hello World !!!\n", pFile);  fputs("Hello CSDN!!!\n", pFile);  fputs("Hello 初阶牛!!!\n", pFile);  }  else  {  printf("打开失败");  return 1;//返回非0  }  //关闭文件  fclose(pFile);  return 0; }

   


运行结果:


虽然之前文本里面已经有了26个英文字母,但是再进行写入操作时,会清空之前的文件内容.



‘a’,追加向文件末尾写数据.


怎样可以保留原来的数据,在数据后面继续增加新数据呢?


只需要将w改成a追加就行了.


pFile = fopen("123.txt", "a");//此时123.txt中已经有24个字母了,a表示追加  if (pFile != NULL)  {  fputs("\n", pFile);//添加换行  fputs("Hello World !!!\n", pFile);  fputs("Hello CSDN!!!\n", pFile);  fputs("Hello 初阶牛!!!\n", pFile);  }

   


原文件中的数据↓



指向追加代码后:↓



4.14 fgets函数


函数功能:


从流中读取字符并将其作为 C 字符串存储到 str 中,直到读取 (num-1) 个字符或到达换行符或文件末尾,以先发生者为准。num-1是因’\0’要占一个字节.


函数模型:



函数参数:


参数含义
str指向在其中复制字符串读取的字符数组的指针。
num要复制到 str 的最大字符数(包括终止空字符)。
stream指向标识输入流的 FILE 对象的指针。stdin 可以用作从标准输入读取的参数。


示例:


#includeint main() {  FILE* pFile;  char str[4][100];  pFile = fopen("123.txt", "r");//此时123.txt中已经有24个字母和3行hello ...  if (pFile != NULL)  {  fgets(str[0], 55, pFile);  fgets(str[1], 10, pFile);  fgets(str[2], 20, pFile);  fgets(str[3], 30, pFile);  }  else  {  printf("打开失败");  return 1;//返回非0  }  //关闭文件  fclose(pFile);   //打印  for (int i=0; i < 4; i++)  {  printf("%s\n", str[i]);  }  return 0; }

   


文件中的数据:



读到的数据:



解释:


fgets(str[0], 55, pFile);从文件第一行开始向后读取54个字符,但是还没有到54个字符时,先遇到了换行符,它使 fgets 停止读取,但它被函数视为有效字符,并包含在复制到 str 的字符串中。

并且,终止空字符会自动附加到复制到 str 的字符之后。


所以第一行打印:


a b c d e f g h i j k l m n o p q r s t u v w x y z


//这下面有两个换行,一个是printf(“%s\n”, str[i]);中的\n,还有一个是文件中的换行也被视作有效字符.


fgets(str[1], 10, pFile);第一行读取完毕之后,光标从下一行开始读取,读取10个字节,即10-1个有效数据(还有一个是’\0’).


运行结果:


Hello Wor


//一个换行,


fgets(str[2], 20, pFile);文件的第二行还未读取结束,则从r后面开始继续读取,20个字节,直到遇到换行.


同理,打印:


ld !!!


//这里两个换行,是printf(“%s\n”, str[i]);中的\n,


fgets(str[3], 30, pFile);这个从第三行开始,遇到换行结束


打印结果:


Hello CSDN!!!


//两个换行


4.15 fsacnf函数与fprintf函数


格式化输入输出函数是什么意思?


其实很简单,就是对于一些特殊格式的输入,比如输入一个保留两位小数的浮点型.


示例:从键盘得到数据,再将数据写入文件


输入:


初阶牛 20 1.755

typedef struct student {  char name[10];  int age;  float stature; }student; #includeint main() {  FILE* pFile;  student s1 ;  fscanf(stdin, "%s%d%f",s1.name, &s1.age, &s1.stature);//从标准输入流(键盘)获取数据  //打开文件  pFile = fopen("123.txt", "w");  if (pFile != NULL)  {  fprintf(pFile, "%s %d %.2f",s1.name, s1.age, s1.stature);//将数据输出到文件  }  else  {  printf("打开失败");  return 1;//返回非0  }  //关闭文件  fclose(pFile);    return 0; }

   


运行结果:


//123.txt


初阶牛 20 1.75


示例:从文件中读取数据输出到显示器(屏幕)


 typedef struct student {  char name[10];  int age;  float stature; }student; #includeint main() {  FILE* pFile;  student s1;  //打开文件  pFile = fopen("123.txt", "r");//此时文件中有数据:初阶牛 20 1.75  if (pFile != NULL)  {  fscanf(pFile, "%6s%2d%f", s1.name, &s1.age, &s1.stature);//从文件中读取数据  }  else  {  printf("打开失败");  return 1;//返回非0  }   //关闭文件  fclose(pFile);  fprintf(stdout, "%6s %2d %.2f", s1.name, s1.age, s1.stature);//将数据输出到显示器  return 0; }

   


4.16 fread函数和fwrite函数


函数原型:



参数说明:


参数含义
ptr指向要写入的元素数组的指针
size要写入的每个元素的大小(以字节为单位)
count元素个数
stream指向指定输出流的 FILE 对象的指针


图解:



/template/Home/leiyu/PC/Static