【C】占位符知识点总结

占位符用在printf()和scanf()

但用法有细微差别:

printf("占位符",变量名)

scanf("占位符",变量地址)

1. 基本概念

占位符是格式化输入输出函数中用于指定数据格式的特殊符号,以%开头。

2. 常用占位符分类

2.1 整数类型

占位符 描述 示例
%d 有符号十进制整数 int a = 10; printf("%d", a);
%u 无符号十进制整数 unsigned int b = 20; printf("%u", b);
%o 无符号八进制整数 printf("%o", 10); // 输出12
%x/%X 无符号十六进制整数(小写/大写) printf("%x", 255); // 输出ff
%ld 长整型 long c = 100L; printf("%ld", c);
%lld 长长整型 long long d = 1000LL; printf("%lld", d);

2.2 浮点数类型

占位符 描述 示例
%f 单精度浮点数 float e = 3.14f; printf("%f", e);
%lf 双精度浮点数 double f = 3.14159; printf("%lf", f);
%e/%E 科学计数法(小写e/大写E) printf("%e", 123.456);
%g/%G 自动选择%f或%e中较短者 printf("%g", 0.0000123);

2.3 字符和字符串

占位符 描述 示例
%c 单个字符 char ch = 'A'; printf("%c", ch);
%s 字符串 char str[] = "hello"; printf("%s", str);

2.4 指针类型

占位符 描述 示例
%p 指针地址 int x; printf("%p", &x);

3. 格式修饰符

3.1 宽度和精度

objectivec 复制代码
// 宽度控制
printf("%5d", 10);     // "   10" (右对齐,宽度5)
printf("%-5d", 10);    // "10   " (左对齐,宽度5)

// 精度控制
printf("%.2f", 3.14159); // "3.14" (保留2位小数)
printf("%5.2f", 3.14159); // " 3.14" (宽度5,保留2位小数)

// 字符串精度
printf("%.3s", "hello"); // "hel" (只输出前3个字符)

3.2 其他修饰符

objectivec 复制代码
// 前导零
printf("%05d", 12);    // "00012"

// 显示正负号
printf("%+d", 10);     // "+10"

// 空格代替加号
printf("% d", 10);     // " 10"

4. 特殊占位符

objectivec 复制代码
// 输出%本身
printf("折扣: 20%%"); // "折扣: 20%"

// %n - 记录已输出的字符数
int count;
printf("hello%n", &count);
printf(" 字符数: %d", count); // "字符数: 5"

注:输出%本身要再加一个%

注:%n还是第一次见:

printf("hello%n", &count); 执行时:

  • 输出字符串 "hello"(5个字符)

  • 遇到 %n 时,它会将到目前为止已输出的字符数 写入到 &count 指向的变量中

  • 所以 count 被赋值为 5

5. scanf中的占位符

5.1 基本用法

objectivec 复制代码
int num;
float fnum;
char ch;
char str[20];

scanf("%d", &num);        // 读取整数
scanf("%f", &fnum);       // 读取浮点数
scanf(" %c", &ch);        // 读取字符(注意空格跳过空白符)
scanf("%s", str);         // 读取字符串

5.2 宽度限制

objectivec 复制代码
// 限制输入字符数,防止缓冲区溢出
char name[11];
scanf("%10s", name); // 最多读取10个字符

5.3 扫描集

objectivec 复制代码
char str[50];
// 只读取小写字母
scanf("%[a-z]", str);
// 读取除换行外的所有字符
scanf("%[^\n]", str);

6. 实用示例

objectivec 复制代码
#include <stdio.h>

int main() {
  // 综合示例
  int age = 25;
  float salary = 12345.67;
  char grade = 'A';
  char name[] = "张三";

  printf("姓名: %-10s 年龄: %03d\n", name, age);
  printf("薪资: %.2f  等级: %c\n", salary, grade);
  printf("十六进制年龄: 0x%X\n", age);

  // 表格输出
  printf("\n%-10s %-8s %-10s\n", "姓名", "年龄", "薪资");
  printf("%-10s %-8d %-10.2f\n", name, age, salary);

  return 0;
}

输出结果:

7. 注意事项

  1. 类型匹配: 确保占位符与变量类型匹配

  2. 地址传递 : scanf需要变量的地址(&运算符)

  3. 缓冲区安全: 使用字符串时注意缓冲区大小

  4. 格式顺序: 占位符顺序与参数顺序一致

  5. 特殊字符 : 注意\n, \t等转义字符的使用

8. 常见错误

objectivec 复制代码
// 错误示例
int a = 10;
printf("%f", a);        // 类型不匹配
scanf("%d", a);         // 缺少&
scanf("%s", &str);      // 数组名本身是地址,不需要&
printf("%d %d", a);     // 参数不足
相关推荐
CoderJia程序员甲8 小时前
GitHub 热榜项目 - 日榜(2025-11-13)
ai·开源·github·1024程序员节·ai教程
小坏讲微服务1 天前
MaxWell中基本使用原理 完整使用 (第一章)
大数据·数据库·hadoop·sqoop·1024程序员节·maxwell
liu****2 天前
18.HTTP协议(一)
linux·网络·网络协议·http·udp·1024程序员节
洛_尘2 天前
JAVA EE初阶 6: 网络编程套接字
网络·1024程序员节
2301_800256112 天前
关系数据库小测练习笔记(1)
1024程序员节
金融小师妹3 天前
基于多源政策信号解析与量化因子的“12月降息预期降温”重构及黄金敏感性分析
人工智能·深度学习·1024程序员节
GIS数据转换器3 天前
基于GIS的智慧旅游调度指挥平台
运维·人工智能·物联网·无人机·旅游·1024程序员节
南方的狮子先生3 天前
【C++】C++文件读写
java·开发语言·数据结构·c++·算法·1024程序员节
Neil今天也要学习3 天前
永磁同步电机无速度算法--基于三阶LESO的反电动势观测器
算法·1024程序员节
开开心心_Every4 天前
专业视频修复软件,简单操作效果好
学习·elasticsearch·pdf·excel·音视频·memcache·1024程序员节