【www.gdgbn.com--php函数】

sscanf定义和用法及分析
sscanf() 函数根据指定的格式解析来自一个字符串的输入。

如果只向该函数传递两个参数,数据将以数组的形式返回。否则,如果传递了额外的参数,那么被解析的数据会存储在这些参数中。如果区分符的数目大于包含它们的变量的数目,则会发生错误。不过,如果区分符少于变量,则额外的变量包含 null。

语法
sscanf(string,format,arg1,arg2,arg++)参数 描述
string 必需。规定要读取的字符串。
format 必需。规定要使用的格式。
arg1 可选。存储数据的第一个变量。
arg2 可选。存储数据的第二个变量。
arg++ 可选。存储数据的第三、四个变量。依此类推。

说明
参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

%% - 返回百分比符号
%b - 二进制数
%c - 依照 ascii 值的字符
%d - 带符号十进制数
%e - 可续计数法(比如 1.5e+3)
%u - 无符号十进制数
%f - 浮点数(local settings aware)
%f - 浮点数(not local settings aware)
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%x - 十六进制数(大写字母)
例子
php教程
$string = "age:30 weight:60kg";
sscanf($string,"age:%d weight:%dkg",$age,$weight);
// show types and values
var_dump($age,$weight);
?>输出:

int(30)
int(60)

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

输入应采用如下形式

a=12,b=24,c=36
采用这种形式是为了使用户输入数据时添加必要的信息,使含义清楚,不易发生输入数据的错误。

——谭浩强,《c语言程序设计》(第2版),清华大学出版社,2008年11月,p71~72

这段文字很唬人,貌似讲的头头是道,其实愚蠢透顶。

程序是用来为用户解决问题的,而不是用来给用户添麻烦的。

任何一个合格的程序员都不会写出

scanf("a=%f,b=%f,c=%f",&a,&b,&c);
这样的代码。理由是,要求用户输入的“a=”、“b=”、“c=”以及两个“,”都毫无意义。把这句蹩脚的代码稍微更改一下,就不难发现其愚蠢。它基本上等价于

scanf("a=");

scanf("%f",&a);

scanf(",");

scanf("b=");

scanf("%f",&b);

scanf(",");

scanf("c=");

scanf("%f",&c);

其中的scanf("a=");、scanf("b=");、scanf("c=");和scanf(",");对于程序来说根本没有任何信息价值,增加这些代码的唯一效果就是给用户增加了许多不必要的麻烦。万一用户输入错误,还可以导致程序“挂掉”或出错。

因此引文不但愚蠢,而且简直是在教唆学习者自虐——程序员总是程序的第一个使用者。

那段引文应该修改为

“如果是

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

输入应采用如下形式

a=12,b=24,c=36
采用这种形式是为了使用户输入数据时同时给用户添加不必要的麻烦,使含义混乱,容易发生输入数据的错误。”

对用户友好的、具有良好易用性的程序代码其实应该这样写

printf("a=");

scanf("%f",&a);

printf ("b=");

scanf("%f",&b);

printf ("c=");

scanf("%f",&c);

通过调用函数printf()给用户以提示,而不是用“scanf("a=");”这样的代码来折磨用户

本文来源:http://www.gdgbn.com/jiaocheng/29605/