有关 sscanf 和 sprintf 的用法

2023-11-20

sscanf 的用法

  • 用法:int sscanf(const char *str, const char *format, ...)

  • 功能:从字符串读取格式化输入。

  • 返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

  • 说明:从一个C字符串变量中格式化地读取指定类型的数据到新的变量中。

  • 举例:

    #include<bits/stdc++.h>
    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<bits/stdc++.h>
    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<bits/stdc++.h>
    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
    

sprintf 用法

  • 用法:int sprintf(char *str, const char *format, ...)

  • 功能:发送格式化输出到字符串。

  • 返回值:如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

  • 说明:将变量(后)的数据格式化地转化为字符串保存在字符串变量(前)中。

  • 举例:

    #include<bits/stdc++.h>
    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;
    }
    

    先使用sscanfstr中读取宽度为5的整数,再使用sprintf将整数a以宽度为10的字符串形式保存在变量s中。
    最后s中的数据为七个空格-12

    #include<bits/stdc++.h>
    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;
    }
    

    先使用sscanfstr中读取宽度为5的浮点数,再使用sprintf将浮点数a四舍五入到小数点后两位后以字符串的形式保存在变量s中。
    最后s中的数据为-12.30

  • 类型说明符:与 sscanf 中提到的一致。由于可以控制写入的精度,所以允许出现%.2lf的格式化要求,这与对printf规定一致。


这两个函数常用于一些要求对字符串判断是否为满足一定要求的合法数字的题目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有关 sscanf 和 sprintf 的用法 的相关文章

随机推荐