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

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 <math.h>
#include <stdio.h>
#include <time.h>
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。

发布了199 篇原创文章 · 获赞 154 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/swy_swy_swy/article/details/105607888
今日推荐