【C进阶】文件操作(上)--(详解、非常适合基础入门学习)(中)

简介: 【C进阶】文件操作(上)--(详解、非常适合基础入门学习)(中)

4. 文件的顺序读写


这些函数的意义:一般与上面fopen的打开方式是相对应的,以什么打开方式就赋予了这个pf指针什么样的权限

功能

函数名 适用于

字符输入函数

fgetc 所有输入流
字符输出函数 fputc 所有输出流

文本行输入函数

fgets 所有输入流
文本行输出函数 fputs 所有输出流

格式化输入函数

fscanf 所有输入流
格式化输出函数 fprintf 所有输出流

二进制输入

fread 文件
二进制输出 fwrite 文件


1.fputc写文件--字符输出函数

fputc('a' + i,pf);//此函数一次写一个字符,所以需要一个循环来输出26个字符

c8b0a17c41a64a0f81e495a5f5ef8fea.png

文献:

d0922dbadefc4ebb84cf357d9df3c016.png

翻译:

47044190635949888cde74f7e59399d2.png

代码实例:

//fputc 写文件
#include<stdio.h>
int main()
{
  FILE* pf = fopen("test.txt", "w");
  if (pf == NULL)
  {
    perror("fopen");
    return 1;
  }
  //写文件
  int ch = 0;
  int i = 0;
  for (i = 0; i < 26; i++)
  {
    fputc('a' + i,pf);//此函数一次写一个字符,ascll码值+1
  }
  //关闭文件
  fclose(pf);
  pf = NULL;
  return 0;
}


效果:

d2088b04290d459b95771414b21e13d9.png


2.fgetc(pf)读文件--字符输入函数

ch = fgetc(pf);//此函数一次读取一个字符


可以看以下执行效果:

b114fab87e134e20a7f236006d739912.png

文献:

ff91e32e930c490f987b47be1858a497.png

翻译:

9b50e04806b2441b83238c30f1280878.png

代码实例:

//fgetc - 读文件操作
#include<stdio.h>
int main()
{
  FILE* pf = fopen("test.txt", "r");
  if (pf == NULL)
  {
    perror("fopen");
    return 1; 
  }
  //读文件
  //把26个字面写到文件中
  int ch=0;//看上面的文献,所以为什么这个地方会用int接收
  //printf("%c\n", ch);
  int i = 0;
  for (i = 0; i < 26; i++)
  {
    ch = fgetc(pf);//此函数一次读取一个字符
    printf("%c ",ch);//ascll码值+1
  }
  //关闭文件
  fclose(pf);
  pf = NULL;
  return 0;
}


代码执行:注意前提是这个文件里面有内容,否则不会输出任何东西

8bd8b13d969d4ea3a016c0f448b6c2ec.png

执行:

aeb51b1d118b4ebf92fab1ce7cd84ec7.png

为什么pf不能++

2d35170a598745c0919e421745512580.png

如果加入一行代码:pf++

541d8bdb542946c89b2af97b81be85ae.png

原因:对于文件指针进行++操作是不允许的,语法不支持


3.fputs--文本行输出函数

文献:

ec49fb42f2f144b8964624cb7a034704.png

翻译:

c8711dba0c1b41dca3f7533977700b74.png

代码实现:

//fputs 写一行数据
#include<stdio.h>
int main()
{
  FILE* pf = fopen("test.txt", "w");//这里写文件名的话默认是在这个工程底下搞的,写成绝对路径或者其它相对路径,要指定
  if (pf == NULL)
  {
    perror("fopen");
    return 1;
  }
  //写一行数组 hello bit
  fputs("hello bit\n", pf);
  fputs("hello world\n", pf);
  // 关闭文件
  fclose(pf);
  pf = NULL;
  return 0;
}


输出不换行:

fputs("hello bit", pf);

fputs("hello world\n", pf);

2782fe3422364d25ade50fb24c401129.png

输出换行: 上面的代码可参考

19e1f43b945b4fe5b4e3fabae1e0b0ab.png


4.fgets--文本行输入函数

文献:

7567806a530b45e6b9b91462cc20f48e.png

翻译:

858206f1e89a43b288622939b0ed5730.png

代码实例:以下注释说明了为什么打印hell

//fgets - 读一行数据
int main()
{
  FILE* pf = fopen("test.txt", "r");
  if (pf == NULL)
  {
    perror("fopen");
    return 1;
  }
  //读
  char arr[20];
  fgets(arr,5, pf);//在.txt文件有内容的情况下,这里的参数5说明最多读4个,最后一个位置是留给'\0'的
  printf("%s\n", arr);
  //关闭文件
  fclose(pf);
  pf = NULL;
  return 0;
}


执行:

ed99f77265c14e1c84f3668719b3804b.png

相关文章
|
7月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
301 0
|
7月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
208 1
|
7月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
131 1
|
编译器
【C进阶】文件操作(下)(详解--适合初学者入门)(上)
【C进阶】文件操作(下)(详解--适合初学者入门)(上)
|
XML 移动开发 JavaScript
JavaScriptDOM编程(基础&进阶)1
JavaScriptDOM编程(基础&进阶)1
61 0
|
JavaScript 前端开发
JavaScriptDOM编程(基础&进阶)3
JavaScriptDOM编程(基础&进阶)3
63 0
|
JavaScript 前端开发
JavaScriptDOM编程(基础&进阶)2
JavaScriptDOM编程(基础&进阶)2
58 0
|
编译器 Linux 数据库
【C进阶】文件操作(上)--(详解、非常适合基础入门学习)(上)
【C进阶】文件操作(上)--(详解、非常适合基础入门学习)(上)
|
6月前
|
Linux 开发工具 C++
技术笔记:RustGUI编程
技术笔记:RustGUI编程
|
3月前
|
存储 XML 前端开发
探索Android应用开发:从基础到进阶
【8月更文挑战第57天】在这篇文章中,我们将深入探讨Android应用开发的奥秘。无论你是新手还是有经验的开发者,本文都将为你提供有价值的见解和技巧。我们将从基本的UI设计开始,逐步介绍数据存储、网络请求等高级主题,并展示一些实用的代码示例。让我们一起踏上这段激动人心的旅程吧!