zoukankan      html  css  js  c++  java
  • 格式化输入输出


    title: 格式化输入输出
    date: 2019/11/29 20:26:40
    toc: true

    格式化输入输出

    printf原型

    #include <stdio.h>
    
    int printf(const char *format, ...);
    int fprintf(FILE *stream, const char *format, ...);
    int dprintf(int fd, const char *format, ...);
    int sprintf(char *str, const char *format, ...);
    int snprintf(char *str, size_t size, const char *format, ...);
    
    // 这个系列的函数可以看man的例子
    #include <stdarg.h>
    int vprintf(const char *format, va_list ap);
    int vfprintf(FILE *stream, const char *format, va_list ap);
    int vdprintf(int fd, const char *format, va_list ap);
    int vsprintf(char *str, const char *format, va_list ap);
    int vsnprintf(char *str, size_t size, const char *format, va_list ap);
    
    

    格式

    %[flags][fldwidth][precision][lenmodifier]convtype
    -左对齐    宽度        精度       L/h/hh...等
    0前导
    # 指定另外前缀 比如十六进制0x
    [可选的] convtype 不可选的,就是最后的格式符号
    
    1. 默认参数是按照传递顺序的,也可以使用%n$来挑选(计数是从1开始),但是这两种不能混用,虽然混用也能打印.如果使用%n$的情况不指定宽度和精度,应该用通配语法*n$

    2. 如果宽度和精度需要后续手动提供,占位符就是*,比如%*d

    int a=10,d=30;
    double b=20,c=30;
    printf("---%*d---
    ", a, d);    //a 是宽度
    printf("---%.*f---
    ", a,b); 	//a 是小数位数
    
    ---        30---
    ---20.0000000000---
    
    1. 关于占位符的更进一步说明, where an argument is required, by writing "%m$" instead of '%' and "*m$" instead of '*',这个基本也用不到
    printf("%*d", width, num);   
    等同于
    printf("%2$*1$d", width, num);
    

    scanf原型

    #include <stdio.h>
    
    int scanf(const char *format, ...);
    int fscanf(FILE *stream, const char *format, ...);
    int sscanf(const char *str, const char *format, ...);
    
    #include <stdarg.h>
    
    int vscanf(const char *format, va_list ap);
    int vsscanf(const char *str, const char *format, va_list ap);
    int vfscanf(FILE *stream, const char *format, va_list ap);
    
    

    格式

    %[*]					[fldwidth]	[m]		[lenmodifier]convtype
      * 表示转换的结果不放到参数			
      						字符宽度
    
    1. 可以使用%n$指定参数位置
    2. %[]扫描字符集合,scanf("%[abc]", buf);  //输入abcdabcd123, buf内容为abc
    3. [a-z] //捕获包括字符从a到z的所有字符,直到找到一个非a-z的字符
    4. []中如果第一字符为^符号则表示出现[]中的内容则停止捕获
    5. 有一些参考https://www.cnblogs.com/windpiaoxue/p/9184194.html
  • 相关阅读:
    Python split()方法分割字符串
    Python创建线程
    Python find()方法
    webpack中‘vant’全局引入和按需引入【vue-cli】
    webpack中‘mint-ui’全局引入和按需引入【vue-cli】
    nginx中 处理post方式打开页面的报错405
    nginx中 vue路由去掉#后的配置问题
    webpack中 VUE使用搜狐ip库查询设备ip地址
    webpack中 VUE使用百度地图获取地理位置
    VUE动态设置网页head中的title
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/11960104.html
Copyright © 2011-2022 走看看