C 和 C++ 中的输入方法总结
C 语言输入方法
1. scanf()
系列
int num;
char str[100];
// 读取基本类型
scanf("%d", &num); // 读取整数
scanf("%f", &floatVar); // 读取浮点数
// 读取字符串(遇到空格停止)
scanf("%s", str); // 不安全,可能缓冲区溢出
// 更安全的带长度限制的版本
scanf("%99s", str); // 最多读取99个字符
// 读取直到遇到指定字符
scanf("%[^\n]", str); // 读取整行(不包括换行符)
2. fgets()
- 读取整行
char buffer[256];
fgets(buffer, sizeof(buffer), stdin); // 包括换行符
3. getchar()
- 读取单个字符
int c = getchar(); // 返回int以处理EOF
4. gets()
(已废弃)
gets(str); // 危险!不检查缓冲区大小
C++ 输入方法
1. 提取运算符 >>
int num;
std::string str;
std::cin >> num; // 读取整数
std::cin >> str; // 读取单词(遇到空格停止)
2. std::getline()
- 读取整行
std::string line;
std::getline(std::cin, line); // 不包含换行符
3. cin.get()
- 读取单个字符
char ch = std::cin.get();
4. cin.getline()
- 读取字符数组
char buffer[256];
std::cin.getline(buffer, sizeof(buffer)); // 包含空字符
对比表
特性 | C (scanf) | C (fgets) | C++ (>>) | C++ (getline) |
---|---|---|---|---|
读取整行 | 有限支持 | ✓ | ✗ | ✓ |
包含空格 | 有限支持 | ✓ | ✗ | ✓ |
包含换行符 | ✗ | ✓ | ✗ | ✗ |
类型安全 | ✗ | ✗ | ✓ | ✓ |
缓冲区溢出保护 | ✗ | ✓ | ✓ | ✓ |
字符串处理便利性 | ✗ | ✗ | ✓ | ✓ |
最佳实践建议
-
C语言中:
- 优先使用
fgets()
读取整行输入 - 对
scanf()
使用字段宽度限制防止溢出 - 永远不要使用
gets()
- 优先使用
-
C++中:
- 读取字符串时优先使用
std::getline()
- 对于已知类型的简单输入可以使用
>>
- 混合使用
>>
和getline()
时要注意清除缓冲区
- 读取字符串时优先使用
混合使用时:
int num;
std::string str;
std::cin >> num;
std::cin.ignore(); // 清除换行符
std::getline(std::cin, str);
需要更详细的某个方法的解释吗?