• 格式化输入输出



    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
  • 相关阅读:
    paip.提升安全性时间判断
    paip.提升安全性本机硬件绑定
    paip.提升性能服务器环境及编程语言架构选择
    paip.提升用户体验提示语
    paip.提升效率输入框不能粘贴的问题
    paip.银联支付接口订单号uuid算法
    paip.Net Framework各个版本的功能不同总结
    Answer 3.0 .NET开源网站功能API说明
    Paip.YXSHOP易想商场功能模块说明
    paip.提升效率文件搜索工具总结
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/11960104.html
Copyright © 2020-2023  润新知