- 字符串的格式化输出:使用
printf函数和%s格式化符来打印字符串。 - 取模运算:使用 运算符进行数学上的取模运算。
下面我们分别对这两部分进行详细说明。

(图片来源网络,侵删)
字符串的格式化输出 (%s)
在 C 语言中,字符串是以字符数组的形式存在的,并以一个空字符 \0 作为结尾。printf 函数使用 %s 这个格式化符来处理和输出字符串。
%s 的工作原理
当你在 printf 中使用 %s 时,printf 会执行以下操作:
- 获取地址:它会读取
%s对应的参数,这个参数必须是一个字符数组(或指向字符的指针),也就是字符串的起始地址。 - 遍历并打印:从该地址开始,
printf会逐个读取字符,并将它们打印到标准输出(通常是屏幕)上。 - 遇到终止符停止:这个过程会一直持续,直到它读取到一个空字符
\0。\0是字符串的结束标志,printf遇到它后就会停止打印。
代码示例
#include <stdio.h>
int main() {
// 定义并初始化一个字符串
char greeting[] = "Hello, World!";
// 使用 %s 来打印整个字符串
printf("The greeting is: %s\n", greeting);
// 也可以直接使用字符串字面量
printf("Another message: %s\n", "This is a direct string.");
return 0;
}
输出:
The greeting is: Hello, World!
Another message: This is a direct string.
%s 的重要注意事项(常见错误)
错误示例:传递一个字符而不是字符串的地址

(图片来源网络,侵删)
char c = 'A';
printf("%s\n", c); // 错误!
为什么会出错?
%s 期望接收一个内存地址(指针),告诉你从哪里开始读取字符,但你传递的是一个字符 'A',它的值是整数 65。printf 会把这个 65 当作一个内存地址去访问,这几乎肯定会引发段错误,导致程序崩溃。
正确做法:
如果你只想打印一个字符,应该使用 %c。
char c = 'A';
printf("The character is: %c\n", c); // 正确!
取模运算 ()
是 C 语言中的一个算术运算符,称为模运算符或取余运算符,它用于计算两个整数相除后的余数。
语法
result = operand1 % operand2;
工作原理
a % b 的结果是 a 除以 b 后剩下的余数。

(图片来源网络,侵删)
- 操作数必须是整数类型(如
int,char,long等),不能用于float或double类型。 - 结果的符号:结果的符号与第一个操作数(
operand1)的符号相同。
代码示例
#include <stdio.h>
int main() {
int a = 10;
int b = 3;
int result = a % b;
printf("10 %% 3 = %d\n", result); // 输出 1 (因为 10 = 3*3 + 1)
int x = 10;
int y = 5;
printf("10 %% 5 = %d\n", x % y); // 输出 0 (因为 10 可以被 5 整除)
int m = 11;
int n = -4;
printf("11 %% -4 = %d\n", m % n); // 输出 3 (结果的符号与 m 相同)
int p = -11;
int q = 4;
printf("-11 %% 4 = %d\n", p % q); // 输出 -3 (结果的符号与 p 相同)
return 0;
}
输出:
10 % 3 = 1
10 % 5 = 0
11 % -4 = 3
-11 % 4 = -3
的常见用途
-
判断奇偶数 如果一个数
n对 2 取模为 0,说明它是偶数;否则是奇数。if (n % 2 == 0) { printf("%d is even.\n", n); } else { printf("%d is odd.\n", n); } -
限制数值范围 在游戏开发或循环中,常用来将一个数值限制在某个范围内,创建一个 0 到 5 的循环索引。
int max_index = 5; int current_value = 7; int index = current_value % (max_index + 1); // 7 % 6 = 1 // index 的值永远是 0, 1, 2, 3, 4, 5
-
整除 获取一个数的某一位数字。
int num = 12345; int last_digit = num % 10; // 12345 % 10 = 5 (获取个位) int second_last = (num / 10) % 10; // (1234) % 10 = 4 (获取十位)
总结与区分
| 特性 | %s (在 printf 中) |
(运算符) |
|---|---|---|
| 名称 | 字符串格式化符 | 取模运算符 / 取余运算符 |
| 功能 | 从指定内存地址开始打印字符串,直到遇到 \0。 |
计算两个整数相除后的余数。 |
| 使用场景 | 输出文本信息。 | 数学计算、条件判断、循环控制。 |
| 操作数 | 一个指向字符的指针(即字符串的起始地址)。 | 两个整数类型(int, char 等)。 |
| 返回值 | printf 本身返回打印的字符数,%s 本身不返回值。 |
返回一个整数(余数)。 |
- 当你看到
printf("%s", ...)中的%s,它是在处理字符串。 - 当你看到
a % b这样的表达式,它是在进行数学运算。
