格式化IO

本文详细介绍了C语言中的格式化输出函数printf(), fprintf(), dprintf(), sprintf(), snprintf(),以及格式化输入函数scanf(), fscanf(), sscanf()的用法和格式控制字符串的编写技巧。通过实例演示了如何控制数据的格式转换,确保有效和安全的数据交互。
摘要由CSDN通过智能技术生成

格式化IO

格式化输出
格式化输入


**# 前言

以下是学习笔记参考整点原子学习笔记

使用到库函数 printf()用于输出程序中的打印信息, printf()函数可将
格式化数据写入到标准输出,所以通常称为格式化输出。除了 printf()之外,格式化输出还包括: fprintf()、
dprintf()、 sprintf()、 snprintf()这 4 个库函数。
除了格式化输出之外,自然也有格式化输入,从标准输入中获取格式化数据,格式化输入包括: scanf()、
fscanf()、 sscanf()这三个库函数,那么本小节将向大家介绍 C 语言库函数的格式化 I/O。


提示:以下是本篇文章正文内容,下面案例可供参考

一、格式输出

C 库函数提供了 5 个格式化输出函数,包括: printf()、 fprintf()、 dprintf()、 sprintf()、 snprintf(),其函数
定义如下所示:

#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int dprintf(int fd, const char *format, ...);
int sprintf(char *buf, const char *format, ...);
int snprintf(char *buf, size_t size, const char *format, ...);

printf()函数用于将格式化数据写入到标准输出;
dprintf()和 fprintf()函数用于将格式化数据写入到指定的文件中(两者不同之处在于,
fprintf()使用 FILE 指针指定对应的文件、而 dprintf()则使用文件描述符 fd 指定对应的文件);
snprintf 和sprintf()函数可将格式化的数据存储在用户指定的缓冲区 buf 中(前者指定大小写入)。

这 5 个函数都是可变参函数,它们都有一个共同的参数 format,这是一个字符串,称为格式
控制字符串,用于指定后续的参数如何进行格式转换, 所以才把这些函数称为格式化输出,因为它们可以调用者指定的格式进行转换输出 。

printf()函数

printf()用于将程序中的字符串信息输出显示到终端(也就是标准输出),相信各位读者学习 C 语言时肯定用过该函数,它是一个可变参函数,除了一个固定参数 format外,后面还可携带 0 个或多个参数,函数调用成功返回打印输出的字符数;失败将返回一个负值!

打印“Hello World”:
printf("Hello World!\n");
打印数字 5printf("%d\n", 5);

fprintf()函数

fprintf()可将格式化数据写入到由 FILE 指针指定的文件中,譬如将字符串“Hello World”写入到标准错
误:

fprintf(stderr, "Hello World!\n");
向标准错误写入数字 5fprintf(stderr, "%d\n", 5);

函数调用成功返回写入到文件中的字符数;失败将返回一个负值!

dprintf()函数

dprintf()可将格式化数据写入到由文件描述符 fd 指定的文件中,譬如将字符串“Hello World”写入到标
准错误:

dprintf(STDERR_FILENO, "Hello World!\n");
向标准错误写入数字 5dprintf(STDERR_FILENO, "%d\n", 5);

函数调用成功返回写入到文件中的字符数;失败将返回一个负值!

sprintf()函数

sprintf()函数将格式化数据存储在由参数 buf 所指定的缓冲区中, 譬如将字符串“Hello World”存放在
缓冲区中:

char buf[100];
sprintf(buf, "Hello World!\n");

当然这种用法并没有意义,事实上,我们一般会使用这个函数进行格式化转换,并将转换后的字符串存
放在缓冲区中,譬如将数字 100 转换为字符串"100",将转换后得到的字符串存放在 buf 中:

char buf[20] = {0};
sprintf(buf, "%d", 100);

sprintf()函数会在字符串尾端自动加上一个字符串终止字符’\0’。

snprintf()函数

sprintf()函数可能会发生缓冲区溢出的问题,存在安全隐患,为了解决这个问题,引入了 snprintf()函数;
在该函数中,使用参数 size 显式的指定缓冲区的大小,如果写入到缓冲区的字节数大于参数 size 指定的大
小,超出的部分将会被丢弃!如果缓冲区空间足够大, snprintf()函数就会返回写入到缓冲区的字符数,与
sprintf()函数相同,也会在字符串末尾自动添加终止字符’\0’。
若发生错误, snprintf()将返回一个负值!

格式控制字符串 format

接下来重点学习以上 5 个函数中的 format 参数应该怎么写,把这个参数称为格式控制字符串,顾名思
义,首先它是一个字符串的形式,其次它能够控制后续变参的格式转换。

格式控制字符串由两部分组成:普通字符(非%字符) 和转换说明。普通字符会进行原样输出,每个转
换说明都会对应后续的一个参数,通常有几个转换说明就需要提供几个参数(除固定参数之外的参数), 使
之一一对应,用于控制对应的参数如何进行转换。如下所示:
printf(“转换说明 1 转换说明 2 转换说明 3”, arg1, arg2, arg3);
这里只是以 printf()函数举个例子,实际上并不这样用。三个转换说明与参数进行一一对应,按照顺序
方式一一对应。
每个转换说明都是以%字符开头,其格式如下所示(使用[ ]括起来的部分是可选的) :

 %[flags][width][.precision][length]type

flags: 标志,可包含 0 个或多个标志;
width: 输出最小宽度,表示转换后输出字符串的最小宽度;
precision: 精度,前面有一个点号" . ";
length: 长度修饰符;
type: 转换类型,指定待转换数据的类型。

可以看到,只有%和 type 字段是必须的,其余都是可选的。下面分别对这些字段进行介绍

二、格式化输入

C 库函数提供了 3 个格式化输入函数,包括: scanf()、 fscanf()、 sscanf(),其函数定义如下所示:
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);

可以看到,这 3 个格式化输入函数也是可变参函数,它们都有一个共同的参数 format,同样也称为格式
控制字符串, 用于指定输入数据如何进行格式转换,与格式化输出函数中的 format 参数格式相似,但也有
所不同。
每个函数除了固定参数之外,还可携带 0 个或多个可变参数。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值