最常用和最标准的方法是使用 system("pause"),但这种方法有缺点,下面我将为你详细介绍几种方法,并分析它们的优缺点。

使用 system("pause") (最简单,但不推荐)
这是初学者最容易想到的方法,因为它非常简单直接。
代码示例
#include <stdio.h>
#include <stdlib.h> // 需要包含这个头文件
int main() {
printf("程序即将暂停,请按任意键继续...\n");
system("pause"); // 调用系统命令
printf("感谢您的等待,程序继续运行,\n");
return 0;
}
工作原理
system() 函数用于执行操作系统命令。system("pause") 实际上是向操作系统的命令行(如 Windows 的 CMD 或 PowerShell)发送 pause 命令,这个命令会显示“请按任意键继续. . .”并等待用户按键。
优点
- 简单易用:只需一行代码,无需复杂的逻辑。
缺点
- 可移植性差:这是最致命的缺点。
pause是 Windows 系统特有的命令,在 Linux 或 macOS 上,system("pause")会提示'pause': command not found,程序会直接执行下去,无法达到暂停效果。 - 依赖外部程序:它依赖于系统的
cmd.exe,这会带来轻微的开销,并且如果系统环境发生变化,可能会导致程序出错。 - 安全性:如果程序需要从不受信任的源获取字符串并传递给
system(),可能会产生命令注入的安全风险,虽然"pause"是安全的,但这是一个坏习惯。
使用 getchar() 或 scanf() (跨平台,推荐)
这是更专业、更通用的方法,它不依赖于任何特定的操作系统命令,因此是跨平台的。
代码示例 (使用 getchar())
getchar() 会从标准输入(通常是键盘)读取一个字符,包括用户按下的回车键。

#include <stdio.h>
int main() {
printf("程序即将暂停,请按任意键继续...\n");
printf("(提示:您需要按下回车键)\n");
// 等待用户输入一个字符(包括回车)
getchar();
printf("感谢您的等待,程序继续运行,\n");
return 0;
}
代码示例 (使用 scanf())
scanf() 也可以实现类似功能,但需要处理一下输入缓冲区。
#include <stdio.h>
int main() {
printf("程序即将暂停,请按任意键继续...\n");
printf("(提示:您需要按下回车键)\n");
int c;
// scanf 的返回值是成功读取的项数
// 我们只关心它是否成功读取了一个整数(字符的ASCII码)
scanf("%d", &c);
printf("感谢您的等待,程序继续运行,\n");
return 0;
}
优点
- 跨平台:代码在任何支持 C 标准的操作系统(Windows, Linux, macOS 等)上都能正常工作。
- 高效:不调用外部程序,直接与标准输入交互,效率更高。
- 不依赖特定环境:只依赖标准 C 库。
缺点
- 需要用户按回车:大多数情况下,用户需要按下回车键才能确认输入,对于习惯了 Windows
pause命令(只需按任意键)这可能不够直观。 - 缓冲区问题:如果在这段代码之前有其他的输入操作(如
scanf("%d", &num)),用户按下的回车键可能会留在输入缓冲区中,导致getchar()或scanf()直接读取到这个回车而立即返回,程序不会暂停,解决方法是清空输入缓冲区。
清空输入缓冲区后的 getchar() (最健壮的跨平台方案)
为了解决方法二中提到的缓冲区问题,可以在调用 getchar() 之前先清空输入缓冲区。
代码示例
#include <stdio.h>
void clear_input_buffer() {
int c;
// 循环读取并丢弃缓冲区中的所有字符,直到遇到换行符或文件结尾
while ((c = getchar()) != '\n' && c != EOF);
}
int main() {
int number;
printf("请输入一个数字: ");
scanf("%d", &number);
printf("您输入的数字是: %d\n", number);
printf("\n程序即将暂停,请按任意键继续...\n");
clear_input_buffer(); // 清空scanf留下的回车符
getchar(); // 然后等待新的输入
printf("感谢您的等待,程序继续运行,\n");
return 0;
}
优点
- 跨平台。
- 健壮:解决了输入缓冲区残留的问题,无论之前有什么输入,都能可靠地暂停。
- 高效。
缺点
- 代码比
system("pause")稍多几行。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
system("pause") |
极其简单 | 不可移植、依赖外部程序、有安全隐患 | 极不推荐,仅在编写纯 Windows 下的快速测试脚本时可能使用。 |
getchar() |
跨平台、高效 | 通常需要按回车键 | 推荐,适用于大多数简单的跨平台暂停需求。 |
getchar() + 清空缓冲区 |
跨平台、高效、健壮 | 代码稍多 | 强烈推荐,这是编写健壮、可靠的跨平台 C 程序的最佳实践。 |
最终建议:
为了编写专业、可移植且可靠的代码,请避免使用 system("pause")。

对于大多数情况,使用 getchar() 就足够了,如果你的程序在 getchar() 之前有其他的 scanf 或 gets 等输入操作,那么务必使用方法三(清空缓冲区 + getchar()),以确保程序行为符合预期。
