C风格的输入和输出以及对应的格式

printf 格式化输出

格式控制符

格式符说明示例
%d十进制整数printf("%d", 42);
%i十进制整数(同 %dprintf("%i", 42);
%u无符号十进制整数printf("%u", 100);
%o无符号八进制整数printf("%o", 10);
%x无符号十六进制(小写)printf("%x", 255);
%X无符号十六进制(大写)printf("%X", 255);
%f浮点数(默认6位小数)printf("%f", 3.14);
%e科学计数法(小写)printf("%e", 123.4);
%E科学计数法(大写)printf("%E", 123.4);
%g自动选择 %f%e(短格式)printf("%g", 0.0001);
%G自动选择 %f%Eprintf("%G", 0.0001);
%c单个字符printf("%c", 'A');
%s字符串printf("%s", "Hello");
%p指针地址printf("%p", &x);
%n已输出字符数(保存到参数)int count; printf("123%n", &count);
%%输出 % 字符printf("%%");

修饰符

修饰符说明
%[flags][width][.precision][length]specifier完整格式说明符结构
flags控制对齐、填充等:
-左对齐(默认右对齐)
+显示正负号(如 +42
(空格)正数前显示空格
00 填充宽度(默认用空格填充)
#特殊格式(如八进制前加 0,十六进制前加 0x
width最小输出宽度(不足时填充)
.precision浮点数小数位数或字符串最大字符数
length指定参数长度:h(short)、l(long)、ll(long long)、L(long double)等

代码示例

#include <stdio.h>

int main() {
    int num = 42;
    float pi = 3.1415926;
    char str[] = "HelloWorld";

    // 示例 1: 基础用法
    printf("%%d: %d\n", num);          // 输出: %d: 42

    // 示例 2: 宽度控制
    printf("%%10d: |%10d|\n", num);    // 输出: |        42|(右对齐,宽度10)

    // 示例 3: 左对齐 + 宽度
    printf("%%-10d: |%-10d|\n", num); // 输出: |42        |(左对齐,宽度10)

    // 示例 4: 前导零
    printf("%%010d: %010d\n", num);    // 输出: 0000000042(宽度10,不足补0)

    // 示例 5: 浮点数精度
    printf("%%.2f: %.2f\n", pi);       // 输出: 3.14(保留2位小数)

    // 示例 6: 字符串截断
    printf("%%.5s: %.5s\n", str);      // 输出: Hello(仅输出前5个字符)

    // 示例 7: 科学计数法
    printf("%%e: %e\n", pi);           // 输出: 3.141593e+00

    // 示例 8: 十六进制带前缀
    printf("%%#x: %#x\n", num);        // 输出: 0x2a

    // 示例 9: 长整型(length修饰符)
    long big_num = 123456789L;
    printf("%%ld: %ld\n", big_num);    // 输出: 123456789

    return 0;
}

scanf 格式化输入

格式控制符

格式符说明示例
%d十进制整数scanf("%d", &num);
%i十进制、八进制、十六进制scanf("%i", &num);
%u无符号十进制整数scanf("%u", &num);
%o八进制整数scanf("%o", &num);
%x十六进制整数scanf("%x", &num);
%f浮点数scanf("%f", &fval);
%lf双精度浮点数scanf("%lf", &dval);
%c字符scanf("%c", &ch);
%s字符串(不读空格)scanf("%s", str);
%[...]匹配字符集合scanf("%[a-z]", str);
%p指针地址scanf("%p", &ptr);
%n已读取字符数scanf("%d%n", &num, &count);

修饰符

修饰符说明
%[*][width][length]specifier完整格式说明符结构
*抑制赋值(读取但不保存)
width最大输入宽度(如 %5d 最多读5位数字)
length参数长度:h(short)、l(long)、ll(long long)等

代码示例(抑制赋值 *

#include <stdio.h>

int main() {
    int num1, num2;

    // 输入 "123 abc 456",但跳过中间的字符串
    scanf("%d %*s %d", &num1, &num2);

    printf("num1 = %d, num2 = %d\n", num1, num2); 
    // 输出: num1 = 123, num2 = 456(中间的 "abc" 被跳过)
    return 0;
}

代码示例(输入宽度限制 width

#include <stdio.h>

int main() {
    char str[10];
    int num;

    // 限制读取字符串最多3个字符
    scanf("%3s %d", str, &num);

    printf("str = %s, num = %d\n", str, num);
    // 输入 "abcdef 42",输出: str = abc, num = 42(仅读取前3字符)
    return 0;
}

代码示例(指定参数长度 length

#include <stdio.h>

int main() {
    short num_short;
    long num_long;

    // 输入 "32767 2147483647"
    scanf("%hd %ld", &num_short, &num_long);

    printf("short: %hd, long: %ld\n", num_short, num_long);
    // 输出: short: 32767, long: 2147483647
    return 0;
}

代码示例(修改日期格式)

#include <stdio.h>

int main() {
    int year, month, day;

    // 输入 "2024-06-15",但跳过分隔符
    scanf("%4d%*[-]%2d%*[-]%2d", &year, &month, &day);

    printf("日期:%d年%d月%d日\n", year, month, day);
    // 输出: 日期:2024年6月15日
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值