一、scanf()函数的控制串
其控制串由三类字符构成:
- 格式化说明符;
- 空白符;
- 非空白符;
格式化说明符
常用格式字符 | 说明 |
---|---|
%d | 当`scanf`碰到`%d`时,会尝试读取一个整数,遇到空格、制表符或换行符等空白字符时输入结束。 |
%f | 当`scanf`碰到`%f`时,会尝试读取一个浮点数(单精度浮点数),遇到空格、制表符或换行符等空白字符时输入结束。 |
%lf | 当`scanf`碰到`%lf`时,会尝试读取一个浮点数(双精度浮点数),遇到空格、制表符或换行符等空白字符时输入结束。 |
%c | 遇到`%c`时,`scanf`会读取一个字符,任何字符都会导致输入结束。 |
%s | 遇到`%s`时,`scanf`会读取一个字符串,遇到空格、制表符或换行符等空白字符时输入结束。 |
%[] | 使用`%[]`格式控制符可以指定匹配的字符范围,也可以使用'^'来排除指定字符范围。 |
%% | `%%`表示一个百分号字符 |
空白符
- 空格(' ') - 换行符('\n') - 回车符('\n')
非空白符
非空白符包括数字、字母、特殊符号以及其他可见字符,以下是一些非空白符的几个例子: - 数字字符:'0'、'1'、'2'、...、'9' - 大写字母:'A'、'B'、'C'、...、'Z' - 小写字母:'a'、'b'、'c'、...、'z' - 特殊符号:'!'、'@'、'#'、'%'、'&'、'*' 等 - 标点符号:','、'.'、'?'、'!' 等 - 括号:'()'、'[]'、'{}' 等
二、输入匹配规则
`scanf`函数按照格式控制符逐个匹配输入数据,严格要求匹配,但是空白符较为特殊(因为在C语言中,空格、制表符和换行符都被视为分隔输入的空白字符)。
例1:
#include <stdio.h>
int main(void)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d,%d,%d/n",a,b,c);
return 0;
}
以下都是合法输入方式:
① 3□□4□□□□5↙
② 3↙
4□5↙
③ 3(tab键)4↙
5↙
......
例2:
#include <stdio.h>
int main(void)
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("%d,%d,%d/n",a,b,c);
return 0;
}
运行时按如下方式输入三个值:
3,4,5 ↙(输入a,b,c的值)
或者
3,□4,□5 ↙(输入a,b,c的值)
3,□□□4,□5 ↙(输入a,b,c的值)
......
都是合法的,但是","一定要跟在数字后面,如:
3□,4,□5 ↙就非法了,程序出错。
三、输入结束说明
遇到`%c`时,`scanf`会读取一个字符,任何字符都会导致输入结束。
例:
#include<stdio.h>
int main()
{
char c1, c2, c3;
scanf("%c%c%c", &c1, &c2, &c3);
printf("%c %c %c", c1, c2, c3);
return 0;
}
输入:a□b□c↙
结果:a→c1,□→c2,b→c3 (其余被丢弃)
原因:在用"%c"输入时,空格和“转义字符”均作为有效字符。
遇到`%s`时,`scanf`会读取一个字符串,遇到空格、制表符或换行符等空白字符时输入结束。
例 :
#include <stdio.h>
int main()
{
char str[80];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入:I love you!
输出:I
四、使用'%%' '%[]'代码举例
1.%%的使用
#include <stdio.h>
int main() {
float percentage1,percentage2;
// 从用户输入中读取百分比值,并保留百分号符号
printf("请输入百分比值(包括百分号符号):");
scanf("%f%% %f%%", &percentage1,&percentage2);
// 输出读取到的百分比值
printf("读取的百分比值为: %.2f%% %.2f%%\n", percentage1,percentage2);
return 0;
}
2.%[]的使用
#include <stdio.h>
int main() {
char str[80];
scanf(" %[^\n]", str); // 读取直到遇到换行符的所有字符
printf("%s\n", str);
return 0;
}