头文件:
#include
函数原型:
int scanf(const char *format,...);
函数功能:按指定格式从键盘输入数据,存入地址表指定的存储单元中,并按回车键结束。
函数参数:format 指定输入格式,后面跟要输入的变量的地址表,为不定参,用"..."表示。
函数返回:正常,返回输入数据的个数。失败返回-1(EOF)
地址表:变量的地址,常用取地址运算符&
scanf支持的格式说明符:
| i,d | 十进制整数 |
| x,X | 十六进制无符号整数 |
| o | 八进制无符号整数 |
| u | 无符号十进制整数 |
| c | 单一字符 |
| s | 字符串 |
| e | 指数形式浮点小数 |
| f | 小数形式浮点小数 |
scanf函数支持的格式说明符可以带一下修饰字符:
| 修饰符 | 功能 |
| h | 用于d,o,x前,指定输入位short型整数 |
| l | 用于d,o,x前,指定输入位long型整数 用于e,f前,指定输入位double型实数 |
| m | 指定输入数据宽度,遇空格或不可转换的字符结束 |
| * | 抑制符,指定输入项读入后,不赋给变量 (eg: %*4d ,*是抑制符,4d指定输入项中4个数字读入后不赋给变量) int a; float c; printf("inpput int float:"); scanf("%3d%*4d%f",&a,&c); printf("a=%d,c=%f",a,c); 程序运行如下: input int float:123456789 a=123,c=890.000000 |
注意事项:
用scanf进行输入时,不能再格式字符串中输入普通字符用于提示的作用,也不能再格式字符后加'n'
用%c格式符时,空格和转义字符作为有效字符输入。
总结:
输入数据时,遇到以下情况认为该数据结束:
1.遇空格,TAB,或回车
2.遇非法输入
3.遇宽度结束
清除输入函数留下的垃圾:
1.用getchar()函数来进行清除
2.用格式串中空格清除
3.用%*c来进行清除
头文件:
#include
函数原型:
int sscanf (char *str, char * format [, argument, ...]);
函数功能:用于从字符串中读取指定格式的数据
函数参数:参数str为要读取数据的字符串;format为用户指定的格式;argument为变量,用来保存读取到的数据。
函数返回值:成功则返回参数数目,失败则返回-1,错误原因存于errno 中。
sscanf()会将参数str 的字符串根据参数format(格式化字符串)来转换并格式化数据(格式化字符串请参考scanf()), 转换后的结果存于对应的变量中。
实例:
#includeint main(void) { char str[100] ="123568qwerSDDAE"; char lowercase[100]; int num; sscanf(str,"%d %[a-z]", &num, lowercase); printf("The number is: %d.n", num); printf("The lowercase is: %s.", lowercase); return 0; }
执行结果:
The number is: 123568. The lowercase is: qwer.
可以看到format参数有些类似正则表达式(当然没有正则表达式强大,复杂字符串建议使用正则表达式处理),支持集合操作,例如:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性



