C语言输入格式控制语法(完整)
「今天是学习C语言第 29 天」
# 输入格式控制
[]表示的字段可选,最基础的格式控制字符串是 %转换类型 。
1.格式控制字符串出现普通的白空字符时,表示输入时跳过白空字符;
2.出现其它普通字符序列时,也表示跳过对应的字符输入,如果不匹配则失败;
3.%开始的是转换说明符,将输入转换成对应的变量值保存;
4.参数应该是指向对应类型的指针。
# 语法:
%[标志*][最大域宽width][类型长度length]转换类型
1.标志*
表示跳过一个类型的数据的输入。
例如:
int main(int argc, char* argv[])
{
double d;
scanf("%*lf %lf", &d);
printf("%lf\n",d);
return 0;
}
输入:100.1 200.2
输出:200.200000
2.最大域宽
非零十进制整数,表示最多从该输入读取的字符数,如果数据超过,截断。
例如:
scanf("%2d", &i); // 输入:1000, i=10
scanf("%5d", &i); // 输入:1000, i=1000
char s[10];
scanf("%5s", s); // 输入:hellooo, s=hello
3.类型长度
类型长度使用字母说明输入对象的大小尺寸。
对于d,i,n,o,u,x转换类型,
h:short int 或 unsigned short int
l:long int 或 unsigned long int
对于e,f,g转换类型,
l: double
L: long double
默认是float。
4.转换类型
d
有符号十进制整数,输入的实参是指向整数的指针。
例如:
int i,j;
scanf("%d %d", &i, &j);
printf("%d %d\n",i,j);
输入:100 -100
输出:100 -100
i
有符号整数,通用的,遇到十进制则输入十进制,遇到八进制则输入八进制,遇到十六进制输入十六进制。
输入的实参是指向整数的指针。
例如:
int i,j,k;
scanf("%i %i %i", &i,&j,&k);
printf("%d %d %d\n",i,j,k);
输入:100 077 0xFF
输出:100 63 255
o
有符号八进制整数。
例如:
int i;
scanf("%o", &i);
printf("%d\n",i);
输入:077 -077
输出:63 -63
u
无符号十进制整数。
x,X
有符号十六进制整数。
e,f,g,
有符号浮点数,参数为指向浮点数的指针。
s
输入非空白的字符串,直到读入第一个空白类字符为止。
例如:
char a[10];
scanf("%s", a);
printf("%s\n",a);
输入:hello world
输出:hello
注:hello world相当于两个字符串。
[]
根据特定的字符集合,从输入的字符序列匹配最长的字符串。
从输入中获取匹配[]定义的字符集合的字符形成字符序列。
对于连接符号 - 处理是实现定义,当-字符出现在[]中间位置时,表示范围,有特殊意义。
[^] 是相反匹配,从输入中获取不在[]定义的字符集合中的字符。
例如:
scanf("%[123]", a); // 输入:12b2c34d
printf("%s\n", a); // 输出:12
scanf("%[^123]", a); // 输入:a123bdk
printf("%s\n", a); // 输出:a
scanf("%[1-9]", a); // 输入:1234567890abc9
printf("%s\n", a); // 输出:123456789
c
输入一个字符序列(不自动加入空字符),字符数有域宽规定,默认是1,输入一个字符。
例如:
char c;
scanf("%c", &c); // 输入:a
printf("%c", c); // 输出:a
char c[10];
c[3] = ' ';
scanf("%3c", &c);
printf("%c %c %c %c",c[0],c[1],c[2],c[3]);
输入:abcdefg
输出:a b c
p
例如:
void *p;
scanf("%p", &p); // 输入:10000
printf("%p\n", p); // 输出:00010000
n
不消耗输入的字符序列,将当前截至到%n的已输入的字符数存储到实参中。
实参要求是指向整数的指针,指向%n不会增加函数fscanf指向返回的输入参数个数。
例如:
int i;
char c[100];
int num = scanf("%s%n",c,&i);
printf("%d %d\n",i,num);
输入:hello
输出:5 1
结果分析:hello刚好是5个字符,统计出来存储到i中。
%
匹配输入的百分号%,消耗输入的普通字符%。
例如:
int i,j;
scanf("%d%%%d",&i,&j);
printf("%d %d\n",i,j);
输入:100%100
输出:100 100
往期精彩推荐:
「喜欢C请赏个 赞 点击右下角 在看」