抽丝剥茧C语言(高阶)文件操作+练习(中)

简介: 抽丝剥茧C语言(高阶)文件操作+练习

读一行字符串。

第一个参数是,读到的字符串,将会被放到str指向的这个位置,第二个参数是都几个字符,第三个是读取的位置流。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  FILE* p = fopen("test.txt", "r");
  if (p == NULL)
  {
    printf("%s", strerror(errno));
    return 1;
  }
  /*fputc('a', p);*/
  /*int e = 0;
  if ((e = fgetc(p)) != EOF)
  {
    printf("%c", e);
  }*/
  /*fputs("qweqwe", p);*/
  char arr[10] = { 0 };
  fgets(arr, 4, p);
  printf("%s", arr);
  fclose(p);
  p = NULL;
}

这里我们发现只有三个字符,这是因为第四个的位置上会放一个’\0‘,所以才打印出来三个。

格式化就代表可以输入结构体这种类型的信息了。

这个函数对比printf函数多了一个参数,是写入流的位置。

这里额外介绍一个函数:

这个也是报错的函数,参数是字符串,一般都是用来写是哪个地方出错了。

如果在里面输入fopen,那么这个函数一旦报错就会在屏幕上的打印出:

fopen:No such file or directory//多了原因和一个:号

这个函数还是很方便的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
  char name[20];
  int age;
  float weight;
};
int main()
{
  struct person s = { "baiye",25,75.0f };
  FILE* p = fopen("test.txt", "w");
  if (p == NULL)
  {
    perror("fopen");
    return 1;
  }
  fprintf(p, "%s %d %f", s.name, s.age, s.weight);
  fclose(p);
  p = NULL;
  return 0;
}

这个能展示格式化信息。

也和scanf函数差不多,多出来的参数是第一个,也是流的位置。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
  char name[20];
  int age;
  float weight;
};
int main()
{
  struct person s = { 0 };//我们并没有初始化任何值
  FILE* p = fopen("test.txt", "r");
  if (p == NULL)
  {
    perror("fopen");
    return 1;
  }
  //fprintf(p, "%s %d %f", s.name, s.age, s.weight);
  fscanf(p, "%s %d %f", s.name, &(s.age), &(s.weight));
  printf("%s %d %f", s.name, s.age, s.weight);
  fclose(p);
  p = NULL;
  return 0;
}

我们从文件中读到了之前存入的信息。

流是这个,如果让外部设备和内存之间有联系,那么就需要各种类型的操作,每种不同的硬件都是不一样的,所以就有了流,我们只需要将信息放到流里面就可以读或写到各种外部设备上了。

在任何一个C语言的程序中,只要运行起来就会默认打开三个流:

FILEstdin - 标准输入流(键盘)
FILE
stdout - 便准输出流(屏幕)

FILE*stderr - 标准错误流(屏幕)

二进制方式写。

第一个参数是你要写的数据的地址,第二个参数是数据大小,第三个参数是一次写几个,第四个是流。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
  char name[20];
  int age;
  float weight;
};
int main()
{
  struct person s = { "baiye",25,75.00 };
  FILE* p = fopen("test.txt", "wb");
  if (p == NULL)
  {
    perror("fopen");
    return 1;
  }
  fwrite(&s, sizeof(struct person), 1, p);
  fclose(p);
  p = NULL;
  return 0;
}

因为是二进制写进去的,所以看不懂。

第一个参数是接收数据的位置,第二个是数据大小,第三个是个数,第四个是流。

返回参数是读取到的数据有多少个。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
  char name[20];
  int age;
  float weight;
};
int main()
{
  struct person s = { 0 };
  FILE* p = fopen("test.txt", "rb");
  if (p == NULL)
  {
    perror("fopen");
    return 1;
  }
  //fwrite(&s, sizeof(struct person), 1, p);
  fread(&s, sizeof(struct person), 1, p);
  printf("%s %d %f", s.name, s.age, s.weight);
  fclose(p);
  p = NULL;
  return 0;
}

这个函数就能看得懂,还是要用魔法打败魔法。

4.1 对比一组函数:

scanf/fscanf/sscanf

printf/fprintf/sprintf

第一个参数是你要存放的位置,后面的就和printf函数的参数没区别了。

把一个格式化的数据转换成字符串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
  char name[20];
  int age;
  float weight;
};
int main()
{
  struct person s = { "baiye",25,75.00 };
  char arr[100] = { 0 };
  sprintf(arr, "%s %d %f", s.name, s.age, s.weight);
  printf("%s", arr);//原理是让结构体里面的数据变成了这样子"baiye 25 75.00"
  return 0;
}

这个是把字符串获取格式化后放在第二个参数中。

第一次参数是你要读取字符串的位置,第二个参数是你要储存的位置。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
  char name[20];
  int age;
  float weight;
};
int main()
{
  struct person s = { "baiye",25,75.00 };
  struct person s1 = { 0 };
  char arr[100] = { 0 };
  sprintf(arr, "%s %d %f", s.name, s.age, s.weight);
  printf("字符串:%s\n", arr);//原理是让结构体里面的数据变成了这样子"baiye 25 75.00"
  sscanf(arr, "%s %d %f", s.name, &(s.age), &(s.weight));
  printf("格式化:%s %d %f\n", s.name, s.age, s.weight);
  return 0;
}

相关文章
|
25天前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
32 2
|
1月前
|
存储 C语言
C语言文件操作(2)
【10月更文挑战第2天】
|
1月前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
22 2
|
2月前
|
C语言
C语言——文件操作
本文介绍了文件的基本操作,包括文件的打开、关闭、读取和写入。使用`fopen`函数以不同模式(如“r”、“w”等)打开文件,并通过`fclose`关闭。文章详细解释了如何利用`fputc`、`fputs`及`fprintf`进行格式化写入,同时介绍了`fgetc`、`fgets`和`fscanf`用于文件内容的读取。此外,还涵盖了二进制文件的读写方法以及如何通过`fseek`、`ftell`和`rewind`实现文件的随机访问。
51 1
C语言——文件操作
|
1月前
|
存储 缓存 编译器
文件操作——C语言
文件操作——C语言
|
1月前
|
存储 C语言
简述C语言文件操作
简述C语言文件操作
11 0
|
1月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
1月前
|
存储 程序员 编译器
C语言文件操作(1)
【10月更文挑战第1天】
|
1月前
|
存储 C语言
C语言的文件操作
C语言的文件操作
21 0
|
1月前
|
存储 移动开发 Unix
C 语言文件操作详解
C 语言文件操作详解