scanf格式控制符

格式控制
1.
   %d     %o     %x      %c       
   %s     %f     %e      无%u格式、%g格式
2.
   scanf("%3d%3d", &a, &b); 
   输入:123456  //a=123,b=456
3.
   scanf("%2d%*3d%2d", &a, &b);
   输入:1234567 //a=12,跳过345,b=67。
4.
   scanf("%7.2f",&a); //不合法的,不能输入:12345.67使a的值为12345.67。
数据流分隔

1.类型分隔
    scanf("%d%c%f", &a, &b, &c);
    输入: 12r1234.567 //scanf接收数据时"r"不匹配,于是"12"转[换成]整型赋值给a a=12,b='r',c=1234.567

2.域宽分隔
    scanf("%2d%3f%4f", &a, &b, &c);
    输入:
    123456789012345 //a=12,b=345,c=6789

3.隐示分隔。
    空格、跳格符('\t')、换行符('\n')默认数据分隔符。

4.显示分隔符。
    scanf("a=%d,b=%f,c=%f", &a, &b, &c);
    输入数据应该为:
    a=1234,b=67.8,c=98.123
数据流中字符控制
    或者说是字符截止条件。
    是则读,否不读,但是剩余字符仍在流中,注意清理。

     const char* p = "12232114687ABC12356";
     sscanf(p, "%[123]", buf); // 把是'1'或'2'或'3'的字读读到buf中,buf="1223211",
     123无关顺序,等同于%[1-3]或%[3-1],【-】两端的 字符 为起始字符。

     %[3-14]      //%[3214]

     %[A-Za-z]    //只取字母
     
     %[^A-Za-z]   //取字母之外的所有字符
     
     "%[a-zA-Z]%[0-9]", buf1, buf2 //"aB12" buf1="aB",buf2="12"
     
     "%[^\n]"   //取一行字符,但是流中还会存在一个换行,fflush(stdin) or "%[^\n]%*c";
     
     "%*[^\n]%*c"  //就表示跳过一行
     
     "%-20[^\n]"   //就表示读取\n前20个字符。
 

 

posted @ 2015-12-11 20:01  一支小白  阅读(2256)  评论(0编辑  收藏  举报