c 语言 格式化输出

#include <stdio.h>

int 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);
 return 0;
}
%5[a-z]意思是最多匹配5个a-z的字符串。在格式化符中[...]的意义,匹配与[]中最长输入的非空字符

举两个例子:
  如果你把改成这样
  char input[ ]="10 0x1b aaa0aaaaa bbbbbbbb";
  那么这是s只能是aaa,到0被截断,因为0不属于a-z。

  如果你把改成这样
  char input[ ]="10 0x1b nothing bbbbbbbb";
  [a-z]改为[a-p]
  那么这是s只能是no,到t被截断,因为t不属于a-p。

  另外:最后一个%f在这里没什么用。

  
  %*s是什么意思,这个就是一个简单的跳过一个字符串,只用在输入格式控制。
  还是举个例子:
  char input[ ]="10 0x1b aaaa bbbb cccc";
  sscanf(input,"%d %x %5[a-z] %*s %s",&i,&j,s,s);

  这样最后输出s中存的是cccc。
  第一个%5[a-z],把aaaa读入了;然后紧接着是%*s意思是跳过一个字符串,也就是bbbb被跳过;第三个%s把cccc读入。
  这个符号的目的就是可以让你有选择的读入,不需要的直接跳过

posted on 2015-06-12 13:48  嘘寒问暖  阅读(193)  评论(0编辑  收藏  举报

导航