while (cin >> a >> b)的逻辑:“一直读,读到没数据为止”
你现在看到的代码:
int a, b;
while (cin >> a >> b) {
// 处理 a 和 b
}
是 C++ 中最常见的“未知数据量”输入写法,尤其在在线评测系统里非常普遍。
🔍 逐句拆解
| 语句部分 | 作用 |
|---|---|
int a, b; |
定义两个整数变量,用来存放每次读入的两个数。 |
cin >> a >> b |
从标准输入读取两个整数,依次存入 a 和 b。 |
while (cin >> a >> b) |
只要读入成功,就继续循环;读失败(如 EOF)就停止。 |
🚩 什么时候读失败?
| 情况 | 举例 | 结果 |
|---|---|---|
| 读到文件末尾(EOF) | Ctrl+D(Linux/macOS)或 Ctrl+Z(Windows) |
循环结束 |
| 类型不匹配 | 输入 abc 而变量是 int |
循环结束 |
| 只读到一半 | 输入只有一个数而需要两个 | 循环结束 |
🧪 举个例子
输入(终端):
1 2
3 4
5 6
[Ctrl+D]
代码:
#include <iostream>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b) {
cout << a + b << '\n';
}
return 0;
}
输出:
3
7
11
✅ 使用场景总结
| 场景 | 是否适用 |
|---|---|
| 多组数据,组数未知 | ✅ 强烈推荐 |
| 多组数据,第一行给组数 T | ❌ 应该用 for (int i = 0; i < T; ++i) |
| 手动调试 | ✅ 方便 |
| 在线评测系统 | ✅ 最常见的写法 |
一句话记住:
while (cin >> a >> b)就是 “一直读,读到没数据为止” 的万能循环输入模板!

浙公网安备 33010602011771号