-
用法:
int sscanf(const char *str, const char *format, ...)
-
功能:从字符串读取格式化输入。
-
返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
-
说明:从一个C字符串变量中格式化地读取指定类型的数据到新的变量中。
-
举例:
#include using namespace std; int main() { char str[100] = {'-', '1', '2', '.', '3', '4', '5'}; int a; sscanf (str, "%5d", &a); printf ("%d", a); return 0; }
该代码表示从变量
str
中最多读取五个字符作为int
型数据给变量a
,输出整数a
。 最后结果为-12
。#include using namespace std; int main() { char str[100] = {'-', '1', '2', '.', '3', '4', '5'}; double a; sscanf (str, "%5lf", &a); printf ("%.3lf", a); return 0; }
该代码表示从变量
str
中最多读取五个字符作为double
型数据给变量a
,输出保留三位的浮点数a
。 最后结果为-12.300
。 注意,不能控制读取的精度,就像scanf也没法控制读取的精度,即读入小数点后三位的浮点数。 -
类型说明符(与scanf相同)
%c
单个字符:读取下一个字符。如果指定了一个不为 1 的宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组中连续位置。在末尾不会追加空字符。%d
十进制整数:数字前面的 + 或 - 号是可选的。%e
,%E
,%f
,%g
,%G
浮点数:包含了一个小数点、一个可选的前置符号 + 或 -、一个可选的后置字符 e 或 E,以及一个十进制数字。两个有效的实例 -732.103 和 7.12e4。%o
八进制整数。实现进制转换。%s
字符串。这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。%u
无符号的十进制整数。%x
,%X
十六进制整数。实现进制转换。
-
用法实例:
#include using namespace std; int main() { int day, year; char weekday[20], month[20], dtm[100]; strcpy( dtm, "Saturday March 25 1989" ); sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year ); printf("%s %d, %d = %s\n", month, day, year, weekday ); return 0; } // March 25, 1989 = Saturday
-
用法:
int sprintf(char *str, const char *format, ...)
-
功能:发送格式化输出到字符串。
-
返回值:如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
-
说明:将变量(后)的数据格式化地转化为字符串保存在字符串变量(前)中。
-
举例:
#include using namespace std; int main() { char str[100] = {'-', '1', '2', '.', '3', '4', '5'}; char s[100]; int a; sscanf (str, "%5d", &a); sprintf (s, "%10d", a); printf ("%s", s); return 0; }
先使用
sscanf
从str
中读取宽度为5的整数,再使用sprintf
将整数a
以宽度为10的字符串形式保存在变量s
中。 最后s
中的数据为七个空格与-12
。#include using namespace std; int main() { char str[100] = {'-', '1', '2', '.', '3', '4', '5'}; char s[100]; double a; sscanf (str, "%5lf", &a); sprintf (s, "%.2lf", a); printf ("%s", s); return 0; }
先使用
sscanf
从str
中读取宽度为5的浮点数,再使用sprintf
将浮点数a
四舍五入到小数点后两位后以字符串的形式保存在变量s
中。 最后s
中的数据为-12.30
。 -
类型说明符:与 sscanf 中提到的一致。由于可以控制写入的精度,所以允许出现
%.2lf
的格式化要求,这与对printf
规定一致。
这两个函数常用于一些要求对字符串判断是否为满足一定要求的合法数字的题目。