scanf/fscanf/sscanf和printf/fprintf/sprintf的使用和对比

一:函数的对比

scanf:从标准输入流中读取格式化数据(通常是键盘)
printf:将格式化数据输出到标准输出流(通常是屏幕)

fscanf:适用于所有输入流的格式化输入函数(一般从指定的文件流中读取格式化的数据)
fprintf:适用于所有输出流的格式化输出函数(一般将格式化的数据写入到指定的文件流中)

sscanf:从字符串中读取格式化的数据
sprintf:从字符串中读取格式化的数据

标准输入流:即从键盘上输入的数据流

标准输出流:从屏幕上输出的数据流

所有输入流:除了键盘,还可以读取文件(等流)里的数据

所有输出流:除了屏幕,还可以写在文件(等流)里的数据

二:函数的使用

1,printf函数

参数解释: 

  • const char *format:这是一个指向格式字符串的指针。格式字符串定义了如何格式化后续的参数。格式字符串可以包含普通字符和格式说明符(以 % 开头的子序列)。
  • ...:这表示函数接受可变数量的参数。这些参数的类型和数量由格式字符串决定

返回值:

  1. 成功写入:当写入操作成功时,函数会返回成功写入的字符总数。这通常是一个非负整数,表示成功写入了多少个字符。
  2. 写入错误:如果发生写入错误(例如,磁盘空间不足、文件无法访问等),则“错误指示器”(ferror)会被设置,并且函数会返回一个负数。这个负数可能是一个特定的错误代码,用于指示发生了哪种类型的错误。具体的错误代码和含义可能因编程语言和库的不同而有所差异。

 函数使用展示:

将一个结构体的内容打印到屏幕上

 2,scanf函数

参数解释:

  • format:一个格式字符串,它定义了应该如何读取输入数据。格式字符串可以包含各种格式说明符(如 %d 用于整数,%f 用于浮点数,%s 用于字符串等)。
  • ...(可变参数):这些参数是指向存储输入数据的变量的指针。它们的类型和数量必须与格式字符串中的格式说明符相匹配。

返回值:

  1. “On success, the function returns the number of items of the argument list successfully filled.”

    • 当函数成功执行时,它会返回成功填充的参数列表中的项目数量。
  2. “This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.”

    • 这个数量可能与预期的项目数量相匹配,但由于匹配失败、读取错误或达到文件末尾,它可能会更少(甚至为零)。
      • 匹配失败:可能是输入数据与期望的格式或模式不匹配。
      • 读取错误:可能是由于文件读取问题,例如文件损坏、磁盘错误等。
      • 达到文件末尾:当读取到文件的末尾时,可能没有足够的项目来填充参数列表。

 函数使用展示:

从键盘上读取数据放进结构体里

3,fprintf函数

参数解释:

  1. FILE *stream:这是一个指向 FILE 对象的指针,它代表了一个打开的文件或其他输出流(例如标准输出 stdout)。
  2. const char *format:这是一个 C 字符串,指定了如何格式化后续的参数。字符串中可以包含普通字符和格式说明符(以 % 开头的子序列)。
  3. ...:这表示函数接受可变数量的参数。这些参数的数量和类型由 format 字符串中的格式说明符确定。

返回值:

  • fprintf 函数返回一个整数,表示成功写入的字符数(不包括字符串的终止字符)。如果出现错误,返回值可能是一个负数。

函数使用展示:

将一个结构体的内容打印到文件名为data.txt 的文件上

4,fscanf函数

参数解释:

  1. FILE *stream:这是一个指向要读取数据的文件流的指针。通常,这个文件流是通过 fopen 函数打开的。
  2. const char *format:这是一个格式字符串,它定义了应该如何读取和解析数据。格式字符串中的每个格式说明符都对应一个额外的参数,这些参数应该指向已经分配了空间的变量,用于存储从文件流中读取的数据。

返回值:

  1. On success, the function returns the number of items of the argument list successfully filled.

    • 当函数成功执行时,它会返回成功填充的参数列表中的项目数量。
  2. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

    • 这个数量可能与预期的项目数量相匹配,但由于匹配失败、读取错误或达到文件末尾,它也可能更少(甚至为零)。

    • Matching failure: 当尝试匹配某些内容(例如,从输入中查找特定的模式或字符串)时,可能会失败。这可能是因为输入数据与预期不匹配。

    • Reading error: 在读取输入数据时可能会出现错误,例如,由于磁盘问题、文件损坏或网络问题。

    • Reach of the end-of-file: 如果函数试图读取文件,并且已经到达了文件的末尾,那么它将停止读取,并且返回的项目数量可能会少于预期。

  3. If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror).

    • 如果在读取过程中发生读取错误或到达文件末尾,将设置适当的指示器(例如,feof或`ferror

函数使用展示:

从一个文件名为data.txt 的文件中读取内容放到结构体上

5,sprintf函数

参数解释: 

  1. char *str:这是一个指向将要存储格式化字符串的缓冲区的指针。这个缓冲区必须足够大,以容纳由 format 参数和后续参数指定的文本。
  2. const char *format:这是一个格式字符串,指定了如何格式化后续参数。这个字符串中的格式说明符(如 %d%s 等)被后续参数的值所替换。
  3. ...:这是一个可变参数列表,表示 sprintf 函数可以接受任意数量和类型的参数,这些参数的数量和类型由 format 字符串决定。

 返回值:

  • 当操作或函数成功执行时,它会返回已经写入的字符的总数。这个数值表示你向某个地方(可能是内存、文件等)写入了多少字符。

函数使用展示:

将一个结构体的内容写入一个字符串

6,sscanf函数

参数解释; 

  • s:这是你要从中读取数据的字符串。
  • format:这是一个格式字符串,它指定了如何解析 s 中的数据。这个格式字符串可以包含普通的字符(它们必须匹配 s 中的字符)以及格式说明符(它们告诉 sscanf 如何解析和存储数据)。
  • ...:这是一个可变参数列表,它提供了存储从 s 中读取的数据的位置。这些参数应该是指向已分配对象的指针,这些对象的类型应与 format 字符串中的相应格式说明符相匹配。

返回值;

        函数在执行成功时的返回行为。它可能返回成功处理或填充的参数数量,这个数量可能与预期的数量相匹配,也可能更少。如果在处理数据之前发生输入错误,函数会返回EOF。 

函数使用展示:

将一个字符串的内容写入一个结构体


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值