2013年(4)
分类: 嵌入式
2013-05-09 11:59:38
%n将本次scanf()调用到%n之前所读取的字符数量(而不是变量个数)存储到对应的变量中,例如:
//---------------------------------------------------------------------------
#include
int main(void)
{
int n, a;
scanf("%d%n",&a,&n);
printf("%d\n",n);
return 0;
}
//---------------------------------------------------------------------------
这个程序中的scanf()调用只要求输入一个整数,即%d对应的a变量,然后就把总共输入的字符数量保存到n变量中,例如如果输入是101这个整数,那么因为这个整数有3位,所以,scanf()会把3保存到n变量中。
*************************************************************************************************
扫描集是用于字符串读取的一个工具,它可以比%s更灵活地控制读取过程,具体如下:
%[]的中括号中需要填写一个正则表达式,用于指明只读取那些字符或者不读取那些字符,
当中括号内的内容不是以^开头的时候,表示只读取在中括号中出现的内容,当遇到第一个没有出现的字符时,就停止读取,并把目前已经读取的内容保存到对应的字符数组中,例如:
char a[80];
scanf("%[0-9]",a); //只读取数字。
假设输入为:
123a456
那么上面的scanf()将把123读取并保存到a数组中,其余的a456将遗留在缓冲区中。
如果把上面的scanf()调用改为如下形式:
scanf("%[13579]",a);
并且输入如下:
123
那么将只读取1,并把它做为字符串保存到a 中,其余字符将遗留在缓冲区中,因为第二个字符'2‘没有出现在扫描集中,所以不再继续读取。
如果扫描集的第一个字符是^,那么读取规则就变成了只读取没有出现在扫描集中的字符,遇到第一个出现在扫描集中的字符时,读取即告停止,例如:
scanf("%[^0-9]",a);
这个调用将只读取非数字字符,遇到数字字符时读取停止,如果输入的是:
abc009icp
那么将读取abc到a数组,其余的字符将遗留在缓冲区中