跳转至

IO专题 - input & output

  • 优先使用标准IO(跨平台兼容)

标准IO

格式化输入输出

  • 格式化输入 scanf 完整的格式内容参考 格式规范字段:scanf 和 wscanf 函数scanf 类型字段字符scanf 宽度规范

    格式规范具有以下形式:
    
    %[*][width][{h|l|ll|I64|L}]type
    
    此处,width、h、l、ll、I64 和 L 表示scanf宽度规范,type 表示 scanf 类型字段字符。
    

  • scanf是格式化输入,那么输入时要严格按照定义的 format 格式输入。所以定义 format 时尽量不要加多余的内容,除非有明确要求。 int a, b; scanf("%d%d", &a, &b); // format 未定义其他描述,那么输入时两个数直接可以用 空格 或 tab 或 换行 进行隔开。

  • scanf 使用 %s 时,输入中间不能有间隔符出现。 char str[32]; scanf("%s", str); // 输入 "hello world" 实际读入只有 "hello",因为字符串之间有间隔符出现,导致输入结束。 str本身就是地址,所有不需要&来取地址。

  • scanf 使用 %s 时要防止越界。

  • 使用 scanf 应当校验输入,确保输入成功。

  • scanf 读取数字后 紧随 getchar() 会带来很麻烦的问题。scanf 输入的结束符会影响到getchar()

    int n;
    char ch;
    scanf("%d", &n);
    ch = getchar();
    /* -- 修改 -- */
    scanf("%d", &n);
    scanf("%*c%c", &ch); // 先处理上一个scanf的结束符,再读入新的字符。
    

  • 格式化输出 printf 完整的格式内容参考 格式规范语法:printf 和 wprintf 函数

    格式化输出 printf 一个转换规范由以下形式的可选和必需字段组成:
    
        %[标志][宽度][.精度][大小]类型
    
    * 格式化输出后附加 \n 可以刷新缓冲区。附加后该语句运行时可立即输出,不需等程序结束才输出。
    

  • 字符输入输出函数:getchar,putchar;字符串输入输出函数:gets(危险的,不对buffer进行校验),puts;示例参阅文档。

类型 scanf输入语句
int a; scanf("%d", &a);
float a; scanf("%f", &a);
double a; scanf("%lf", &a);
char a; scanf("%c", &a);
long long a; scanf("%lld", &a);
char a[5]; scanf("%s", a);
类型 printf输出语句 说明
int a; printf("%d", a);
float a; printf("%f", a);
float a; printf("%g", a); 打印最短形式的浮点数
double a; printf("%lf", a);
char a; printf("%c", a);
long long a; printf("%lld", a);
char a[5]; printf("%s", a);