文件(一)——C语言(下)

简介: 文件(一)——C语言

字符串读(fgets)

描述

C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

声明

下面是 fgets() 函数的声明。

char *fgets(char *str, int n, FILE *stream)

参数

  • str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
  • n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

返回值

如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。

如果发生错误,返回一个空指针。

int main()
{
  char buf[1024] = { 0 };
  FILE* pf = fopen("test.txt", "r");
  if (pf == NULL)
  {
    return 0;
  }
  fgets(buf, 1024, pf);
  printf("%s", buf);
  fclose(pf);
  pf = NULL;
  return 0;
}

字符串写(fputs)

描述

C 库函数 int fputs(const char *str, FILE *stream) 把字符串写入到指定的流 stream 中,但不包括空字符。

声明

下面是 fputs() 函数的声明。

int fputs(const char *str, FILE *stream)

参数

  • str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。

返回值

该函数返回一个非负值,如果发生错误则返回 EOF。

int main()
{
  char buf[1024] = { 0 };
  FILE* pf = fopen("test.txt", "w");
  if (pf == NULL)
  {
    return 0;
  }
  fputs("hellow", pf);
  fgets(buf, 1024, pf);
  pf = NULL;
  return 0;
}
int main()
{
  char buf[1024] = { 0 };
  FILE* pf = fopen("test.txt", "w");
  fgets(buf, 1024, stdin);//从标准输入流读取
  fputs(buf, stdout);//输出到标准输出流
  return 0;
}

上面代码可以等价于

int main()
{
  char buf[1024] = { 0 };
  FILE* pf = fopen("test.txt", "w");
  gets(buf);
  puts(buf);
  return 0;
}

格式化写(fprintf)

int main()
{
  int a = 111;
  FILE* pf = fopen("test.txt", "w");
  fprintf(pf, "%d", a);
  return 0;
}

注释:把a写到文件里面

格式化读(fscanf)

struct S
{
  int n;
  float score;
  char arr[10];
};
int main()
{
  struct S s = { 0 };
  FILE* pf = fopen("test.txt", "w");
  fscanf(pf, "%d %f %s", &(s.n), &(s.score), s.arr);
  return 0;
}

注释:把信息从文件里面读到结构体里面

比较

    scanf( "%d %f %s", &(s.n), &(s.score), s.arr);
  //相当于
  fscanf(stdin, "%d %f %s", &(s.n), &(s.score), s.arr);
  fprintf(stdout, "%d %f %s", s.n, s.score, s.arr);
  //相当于
  printf( "%d %f %s", s.n, s.score, s.arr);

sprintf和sscanf

sprintf

int main()
{
  struct S s = { 100,3.14,"abcdef"};
  char buf[1024] = { 0 };
  sprintf(buf, "%d %f %s", s.n, s.score, s.arr);
  return 0;
}

把结构体内容写到字符数组里面去。

sscanf

int main()
{
  struct S s = { 100,3.14,"abcdef"};
  struct S temp = { 0 };
  char buf[1024] = { 0 };
  sprintf(buf, "%d %f %s", s.n, s.score, s.arr);
  sscanf(buf, "%d %f %s", &(temp.n), &(temp.score), temp.arr);
  return 0;
}

把字符数组里面的内容读到结构体里面去。

相关文章
|
22天前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
67 3
|
2月前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
2月前
|
存储 编译器 C语言
C语言:文件缓冲区刷新方式有几种
C语言中文件缓冲区的刷新方式主要包括三种:自动刷新(如遇到换行符或缓冲区满)、显式调用 fflush() 函数强制刷新、以及关闭文件时自动刷新。这些方法确保数据及时写入文件。
|
2月前
|
C语言
【C语言】探索文件读写函数的全貌(三)
【C语言】探索文件读写函数的全貌
|
2月前
|
存储 C语言
【C语言】探索文件读写函数的全貌(二)
【C语言】探索文件读写函数的全貌
|
2月前
|
C语言
【C语言】探索文件读写函数的全貌(一)
【C语言】探索文件读写函数的全貌
|
2月前
|
存储 文件存储 C语言
【C语言】深入了解文件:简明指南
【C语言】深入了解文件:简明指南
|
3月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
4月前
|
存储 C语言
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
66 15
|
4月前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查