博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言标准库详解(三):stdio.h之格式化输入
阅读量:4170 次
发布时间:2019-05-26

本文共 1984 字,大约阅读时间需要 6 分钟。

c语言标准库详解(三):<stdio.h>之格式化输入

fscanf()函数

int fscanf(FILE *stream, const char *format, ...)

fscanf 函数根据格式串 format 从流 stream 中读取输入,并把转换后的值赋值给后续各个参数,其中的每个参数都必须是一个指针。当格式串 format 用完时,函数返回。如果到达文件的末尾或在转换输入前出错,该函数返回 EOF;否则,返回实际被转换并赋值的输入项的数目。

格式串format

格式串format通常包括转换说明,它用于指导对输入进行解释。格式字符串中可以包含下列项目:

  • 空格或制表符
  • 普通字符(%除外),它将与输入流中下一个非空白字符进行匹配
  • 转换说明,由一个%、一个赋值屏蔽字符*(可选)、一个指定最大字段宽度的数(可选)、一个指定目标字段宽度的字符(h、l或L)(可选)以及一个转换字符组成。
    转换说明决定了下一个输入字段的转换方式。通常结果将被保存在由对应参数指向的变量中。但是,如果转换说明中包含赋值屏蔽字符*,例如%*s,则将跳过对应的输入字段,并不进行赋值。输入字段时一个由非空白符字符组成的字符串,当遇到下一个空白符或达到最大字段宽度(如果有的话)时,对当前输入字段的读取结束。这意味着,scanf 函数可以跨越行的边界读取输入,因为换行符也是空白符(空白符包括空格、横向制表符、纵向制表符、换行符、回车符和换页符)。

转换字符表

转换字符说明了对输入字段的解释方式。对应的参数必须是指针。

如果参数是指向 short 类型而非 int 类型的指针,则在转换字符 d、i、n、o、u 和 x之前可以加上前缀 h。如果参数是指向 long 类型的指针,则在这几个转换字符前可以加上字母 l。如果参数是指向 double 类型而非 float 类型的指针,则在转换字符 e、f 和 g 前可以加上字母 l。如果参数是指向 long double 类型的指针,则在转换字符 e、f 和 g 前可以加上字母 L。

转换字符 输入数据 参数类型
d 十进制整数 int *
i 整型数 int * 该整型数可以是八进制(以0开头)或十六进制(以0x或0X开头)
o 八进制整型数(可以带或不带前导0) int *
u 无符号十进制整型数 unsigned int *
x 十六进制整型数(可以带或不带前导0x或0X) int *
c 字符 char * 按照字段宽度的大小把读取的字符保存到制定的数组中,不增加’\0’字段宽度的默认值为 1。在这种情况下,读取输入时将不跳过空白符。如果需要读入下一个非空白符,可以使用%1s
s 由空白字符组成的字符串(不包含引号) char * 它指向一个字符数组,该字符数组必须有足够空间,以保存该字符串以及在尾部添加的’\0’字符
e,f,g 浮点数 float * float 类型浮点数的输入格式为:一个可选的正负号、一个可能包含小数点的数字串,一个可选的指数字段(字母 e 或 E 后跟一个可能带正负号的整型数)
p printf("%p")函数调用打印的指针值 void *
n 将到目前为止该函数调用读取的字符数写入对应的参数中 int *
[…] 与方括号中的字符集合匹配的输入字符中最长的非空字符串 char * 末尾将添加’\0’。[]…]表示集合中包含字符“]”
[^…] 与方括号中的字符集合不匹配的输入字符中最长的非空字符串 char * 。末尾将添加’\0’。[^]…]表示集合中不包含字符“]”
% 表示"%"本身,不进行赋值
注:这里的倒数第二条与第三条就是正则表达式

实例代码

#include 
#include
#include
int main(){
int printCount; int intAnimal; double animal; scanf("%f",&animal); printf("Oct : %o\n",intAnimal); printf("Hex : %x\n",intAnimal); printf("HEX : %X\n",intAnimal);}

scanf()函数

int scanf(const char *format, ...)

scanf(…)函数与 fscanf(stdin, …)等价。

sscanf()函数

int sscanf(const char *s,const char *format, ...)

sscanf(s, …)函数与 scanf(…)等价,所不同的是,前者的输入字符来源于字符串 s。

转载地址:http://zcwai.baihongyu.com/

你可能感兴趣的文章
进程和线程的区别
查看>>
int main(int argc,char* argv[])详解,以及与int main()有什么区别
查看>>
SourceInsight全工程查找替换方法
查看>>
C语言chdir()函数:改变当前的工作目录
查看>>
Linux下的函数执行时间的统计方法(测试某个函数的执行时间)
查看>>
调整内核printk的打印级别(启动脚本中运行 echo 0 4 0 7 > /proc/sys/kernel/printk 关闭所有内核打印)
查看>>
临时关闭打开console办法
查看>>
Linux中gmtime和localtime的区别(time_t格式转换为tm格式)
查看>>
如果函数传递的是结构体,小心在调用的参数中给指针重新赋值(拿tm结构体举例)
查看>>
使用nm命令获取linux的可执行文件里或动态库中的所有函数名称
查看>>
动态库编写 头文件.h注意事项
查看>>
多个动态库的依赖问题(先后顺序务必注意)
查看>>
二叉树的最大深度
查看>>
N 叉树的最大深度
查看>>
剑指 Offer 52. 两个链表的第一个公共节点 & 相交链表
查看>>
剑指offer 03.数组中的重复数字(四种办法!哎,就是全!)
查看>>
三层--对你的认识再多一点
查看>>
数据库初级篇--EA & ER & SQL Server
查看>>
离线安装.net framework3.5
查看>>
抽象工厂+反射(一)
查看>>