急!!sscanf函数问题!!C语言问题!!

来源:百度知道 编辑:UC知道 时间:2024/06/09 05:31:12
下面的代码我没看懂,请高手分析一下,比如假设此时buffer中有个数据是:12c13,请高手按下面的代码分析一下代码工作流程.请留下:QQ号,谢谢!!尽可能详细些!!

#include <stdio.h>
#include <stdlib.h>
#define mm 1
#define ss 2
void
function(char *buffer)
{
int a,b,c;
if(sscanf(buffer,"%d %d %d",&a,&b,&c)!=3){
a=mm;
if(sscanf(buffer,"%d %d",&b,&c)!=2){
b=ss;
if(sscanf(buffer,"%d",&c)!=1){
fprintf(stderr,"bad input: %s",buffer);
}
}
}
假设此时buffer中有个数据是:12c13,sscanf扫描时会在字母c处停止扫描,后面的13也不会存入:&c,对吗??

sscanf将指定缓冲区中的数据格式化到变量中

返回0表示失败
否则,表示正确格式化数据的个数

就这么简单啊。.

buffer[] = "12c13";
if(sscanf(buffer,"%d %d %d",&a,&b,&c)!=3)
要取三个%d,但buffer中只能取到12跟13两个数,所以!=3,接着执行
if(sscanf(buffer,"%d %d",&b,&c)!=2)
这时,是可以取到两个数的,所以==2,下面的!=1就不执行了.

PS>sscanf是返回的取的数据的个数,还有"%d %d"之间的空格应该去掉,不然因为buffer中不包含空格而解析出错.

#include <stdio.h>
#include <stdlib.h>
#define mm 1
#define ss 2

void function(char *buffer)
{
int a,b,c;
printf("%s\n",buffer);
if(sscanf(buffer,"%d %d %d",&a,&b,&c)!=3)
{
a=mm;
if(sscanf(buffer,"%d %d",&b,&c)!=2)
{
b=ss;
if(sscanf(buffer,"%d",&c)!=1)
{
fprintf(stderr,"bad input: %s\n",buffer);
}
}
}

};

void main()
{
char *abc="";
function(abc);