scanf( )的用法
- scanf()从stdin(标准输入)读取,包含在头文件stdio.h中,与此类似的有
fscanf() 指定输入流
sscanf() 指定缓存区 - scnaf()的用法
(1)scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数. format(格式)字符串由控制字符,空白字符和非空白字符组成. 控制字符以一个%符号开始。
(2)scanf()读取匹配format(格式)字符串的输入. 当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过. 非空白字符和输入匹配, 然后丢弃.
(3)scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.
- scanf() 的控制字符
控制字符 | 说明 | 控制字符 | 说明 |
---|---|---|---|
%c | 一个单一的字符 | %p | 一个指针 |
%d | 一个十进制整数 | %n | 一个等于读取字符数量的整数 |
%i | 一个整数 | %s | 一个字符串 |
%e, %f, %g | 一个浮点数 | %% | 一个精度符号 |
%o | 一个八进制数 | %[ ] | 一个字符集 |
%x | 一个十六进制数 | %u | 一个无符号整数 |
- scanf()的一些用法
- “%ns”,n为整数,读入的字符串最长不超过n,然后在末尾补’ ’
- %nf 读入的浮点数最多有n位整数,位数多于n,会截断。
- “%n[a-z]” 读入最多n个字符,如果遇到非a-z的字符,停止
- “%[^=]” 读入任意多的字符,直到遇到"="停止
- “%n[^=]” 读入"="号前的至多n 个字符
- "*"表示该输入项读入后不赋予任何变量,即跳过该输入值。
- 比如%[0-9]表示只读入’0’到’9’之间的字符,%[a-zA-Z]表示只读入字母,
'-'是范围连接符,也可以直接列出你需要读入的字符。
example
用scanf()代替gets()读取一整行存储为字符串 //哼 再也不用gets()了
char *str;
scanf("%[^
]%*c",str);
printf("%s",str);
输入:
happy end
输出:
happy end
其中,*%c的作用是吸收
仅读取到指定字符
scanf("%[^0-9]%d",str,&num);
printf("%s
",str);
printf("%d",num);
输入:
happy123
输出:
happy
123
2018/4/10
在 printf 中,* 作为整型参数控制输出长度,如 %*s 相当于%ns,
%*s不会截断输出,%.*s会截断输出,均不补足长度
%*d不会截断输出空格补足长度,%.*d不会截断输出,会用前导0补足长度
int len, num;
scanf("%d%d",&len, &num);
printf("%*d",len,num);
//输入5 20
//输出 20
//输入1 20
//输出2
2019/10/20