printf,sscanf的用法及sscanf和sprintf的返回值的含义!

来源:互联网 发布:真空收纳袋 知乎 编辑:程序博客网 时间:2024/06/06 08:24

1、设计一个软件时,一定要注意每一个细节,那怕是一个按钮的响应顺序,或在什么位置响应都要设计

好(即使在不同的地方设置响应都能达到目的)。
2、printf的特殊用法
void main()
{
char s[10]="kongdeli";
printf("%3s,%7.2s,%.4s,%-5.3s/n","CHINA","CHINA","CHINA","CHINA");
printf("%.*Ns",4,s);
}

printf("kong%ndeli%n",&i,&j);//i,j分别用于存放在%n前面所有的字符个数。
//在这i的值为4,j的值为8(在它前面的所有字符的个数)
printf("%d,%d",i,j);

3、sscanf()函数的用法int sscanf( const char *buffer, const char *format [, argument ] ... )
其实sscanf函数和scanf函数很像,只不过是scanf是从控制台下用户自己输入的,而sscanf是从buffer中

读取数据,而不用用户输入了(相当于用户输入的字符串是buffer).后面的argument是要存储的位置。
在format中出现的字符,是要求我们必须输入的字符。就像scanf("i=%d,j=%d",&i,&j)似的,你输入i和j

的值时,必须是i=3,j=4的形式。
在匹配的过程中,只要遇到不匹配的情况,sscanf就结束运行。
例子一:
#include <stdio.h>
void main()
{
char *p="kongdeli";
char s[100]={0};
int L;
sscanf(p,"%s%n",s,&L);//将p中的字符串以字符的形式输入到s中;%n的意思是将%n前面的字符

    //个数存入L中;
}

例子二:
#include <stdio.h>
void main()
{
char *p="kongdeli";
char s[100]={0};
sscanf(p,"kong%s",s); //"kong%s"的意思是说输入时必须输入kong+字符串的形式,如果不

符合这个形式,则输入失败。
printf("%s/n",s);   //结果为deli。
}
例子三
#include <stdio.h>
void main()
{
char *p="B0C1D2";
unsigned char tmp[3]={0};
sscanf(p,"%2x%2x%2x",&tmp[0],&tmp[1],&tmp[2]);
//将是将p的前两个字符组成的B0以16进制的形式存入tmp[0],C1存入tmp[1],D2存入tmp[2].

}

4、sscanf函数返回值的含义是有多少个变量被赋值。
#include <stdio.h>

void main()
{
char *str="1234";
int x,y;
int n= sscanf(str,"%2d%2d",&x,&y);
printf("");
}
x,y的值分别为12,34;因为有两个变量通过str被赋了值,所以n=2。
假如 m=sscanf(str,"%d%d",&x,&y);
那么结果为:x=1234,y为不确定数,n=1;
注意:如果t=sscanf(str,"%d%n",&x,&y);那么
x=1234,y=4(因为%n前面有4个字符),n=1。返回值不包含向%n对应的变量中赋的值。

5、sprintf的返回值的含义是有多少个字符被输入到str中。
#include <stdio.h>

void main()
{
char str[10]={0};

int n= sprintf(str,"%3d%2d%2d",12,34,56);
printf("%s/n",str);
}
n=7。
----------------------------------------------------------------------------
以下是网上的
头文件 #include<stdio.h>

定义函数 int sscanf (const char *str,const char * format,........);

函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请

参考scanf()。转换后的结果存于对应的参数内。

返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。

范例 #include<stdio.h>
main()
{
int i;
unsigned int j;
char input[ ]=”10 0x1b aaaaaaaa bbbbbbbb”;
char s[5];
sscanf(input,”%d %x %5[a-z] %*s %f”,&i,&j,s,s);
printf(“%d %d %s/n”,i,j,s);
}

执行 10 27 aaaaa


sscanf(stringBuf.c_str(), "%20[^#]#%20[^/n]",......)语句中""中的内容含义为:

“%[ ]”符号用于声明字符串,它比“%s”更具体,可以用于设置读取的样式。例如“%[a-z]”只读取小

写字母,读到其它字符就结束。注意,方括号中如果有“^”,代表一直读到某字符为止。例如:

“%[^#]”:读取字符串,一直到出现“#”号为止。

“%20[^#]”:读取20个字节的字符串,出现“#”号时结束。

所以,“%20[^#]#%20[^/n]”的意义就是,

读取两个20字节大小的字符串,第一个字符串可以用#结束,第二个字符串可以用回车符结束。

它们的具体阐述,参见MSDN:“scanf Type Field Characters”章节,和“scanf Widt