C/C++ 输入方法简明指南
一、快速对比表
| 方法 | 功能 | 能否读空格 | 使用场景 |
|---|---|---|---|
| C++ 方法 | |||
cin >> 变量 |
读取数据 | ❌ 跳过 | 读取单个数字、单词 |
cin.get() |
读取一个字符 | ✅ 可以 | 密码输入、菜单选择 |
cin.getline(数组,大小) |
读取一行到字符数组 | ✅ 可以 | 读取固定长度字符串 |
getline(cin,字符串) |
读取一行到string | ✅ 可以 | 读取任意长度字符串(推荐) |
| C 方法 | |||
scanf("%d",&num) |
格式化输入 | ❌ 跳过 | 读取格式化数据 |
getchar() |
读取一个字符 | ✅ 可以 | 单个字符处理 |
fgets(数组,大小,stdin) |
读取一行 | ✅ 可以 | 安全的行输入 |
二、C++ 输入方法详解
1. cin >>- 最简单的输入
int num;
string word;
cin >> num >> word; // 输入"42 Hello"
// num=42, word="Hello"(不会读空格)
注意:遇到空格/换行就停止
2. cin.get()- 读取单个字符,包括空格,制表符,换行符等
char ch = cin.get(); // 读取下一个字符,包括空格
cout << "你输入了: " << ch;
3. getline()- 读取整行(最常用!)
读取完一行后会自动删除缓冲区的换行符
#include <string>
string line;
getline(cin, line); // 读取整行,包含空格
cout << "你输入了: " << line;
优点:自动管理内存,不会溢出
4. cin.getline()- 旧式行输入
char buffer[100];
cin.getline(buffer, 100); // 读取最多99个字符
缺点:需要预先分配数组大小
三、C语言输入方法
1. scanf()- 格式化输入
int num;
char str[20];
scanf("%d %s", &num, str); // 读取整数和字符串
注意 :%s遇到空格停止
2. fgets()- 安全的行输入
char buffer[100];
fgets(buffer, 100, stdin); // 读取一行
优点:指定最大长度,防止溢出
3. getchar()- 单个字符
char ch = getchar(); // 读取一个字符
四、常见问题解答
Q1: 如何读取带空格的整行文本?
A : 使用 getline(cin, str)(C++)或 fgets(buffer, size, stdin)(C)
Q2: cin >>后接 getline()出问题?
A : 在 cin >>后添加 cin.ignore()清除缓冲区:
int age;
string name;
cin >> age;
cin.ignore(); // 清除换行符
getline(cin, name); // 现在能正常读取
Q3: 哪种方法最安全?
A : C++用 getline(cin, str),C用 fgets(),它们都不会溢出缓冲区。
五、一句话选择指南
-
读数字/单词 →
cin >>或scanf() -
读整行文本 →
getline(cin, str)(首选) -
读单个字符 →
cin.get()或getchar() -
与C代码兼容 → 用C风格输入
六、最佳实践示例
#include <iostream>
#include <string>
using namespace std;
int main() {
// 读取数字
int age;
cout << "年龄: ";
cin >> age;
cin.ignore(); // 重要!清除换行符
// 读取包含空格的字符串
string name;
cout << "姓名: ";
getline(cin, name); // 可以读"张三 李四"
cout << "姓名:" << name << " 年龄:" << age;
return 0;
}