int scanf(char *format[,argument,...]);
返回成功赋值的数据项数,出错时则返回EOF scanf("<格式化字符串>",<地址列表>);
读取整数、浮点数、%s字符串 时,自动忽略空白字符(space,tab,newline)
例如 scanf(“%d%d%d”,&a,&b,&c); 在a b c之间前后可以出现任意数量的空白字符
1 3
4
在此基础上,输入的内容必须和format字符串严格匹配
scanf(“%d,%d,%d”,&a,&b,&c); a b c前面可以有任意数量的空白字符,但a和b后必须紧跟一个逗号
供测试:
#include
int main(){
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
return 0;
}
scanf(“%3[a-z]”,arr) 限制读取的个数最多为3个
scanf(“%[字符列表]”,arr)
只有字符列表中的内容会被识别 a-z表示范围,[^字符列表A]表示除字符列表A之外的其他字符
scanf(“%*d%[a-z]”,arr) 跳过数字读小写字母 *表示跳过 %d 忽略一个整数 %[a-z]忽略一段小写字母
#include
int main(int arg_count, char* arg_values[])
{
char arr[100];
//scanf("%3[a-z]",arr);
//scanf("%[01]",arr); //只识别01
//scanf("%[0-9]",arr); //只识别0123456789
//scanf("%[.0-9a-zA-Z_-]",arr);
//scanf("%[ \na-z]",arr); //读到不在字符列表中 或 结尾EOF 会自动结束
//scanf("%*[a-z]%s",arr); // %*d 忽略一个整数 %*[a-z]忽略一段小写字母
scanf("%[^\n]%*c",arr); //^非 [^字符列表] 除了字符列表的其他任意字符 读非换行符 并把结尾的换行符给跳过
printf("read is '%s'\n",arr);
return 0;
}
format字符串
格式字符 | 说明 | 示例 |
---|---|---|
%a | 读入一个浮点值(仅C99有效) | |
%A | 同上 | |
%c | 读入一个字符 | |
%d | 读入十进制整数 | |
%i | 读入十进制,八进制,十六进制整数 | |
%o | 读入八进制整数 | |
%x | 读入十六进制整数 | |
%X | 同上 | |
%c | 读入一个字符 | |
%s | 读入一个字符串 | |
%f | 读入一个浮点数 | |
%F | 同上 | |
%e | 同上 | |
%E | 同上 | |
%g | 同上 | |
%G | 同上 | |
%p | 读入一个指针 | |
%u | 读入一个无符号十进制整数 | |
%n | 至此已读入值的等价字符数 | |
%[] | 扫描字符集合 | |
%% | 读%符号 |
参考:
https://linuxstyle.blog.csdn.net/article/details/174326
https://blog.csdn.net/zsx0728/article/details/118439314