- 简单加密
一、cin.get(ch) 是什么?
- @ 2026-3-21 17:03:54
一、cin.get(ch) 是什么?
cin.get(ch) 是 C++ 中 cin 输入流的成员函数,核心作用是从输入中读取单个字符(包括空格、换行符等空白字符),并将读取的字符存入变量 ch 中。
它和直接用 cin >> ch 的最大区别是:cin >> ch 会自动跳过空格、换行、制表符等空白字符,而 cin.get(ch) 会读取所有字符(包括空白字符)。
二、cin.get(ch) 基础用法(完整代码)
#include <iostream>
using namespace std;
int main() {
char ch;
cout << "请输入任意字符(包括空格、换行):" << endl;
// 循环读取字符,直到读取到换行符 '\n' 停止
while (cin.get(ch)) { // cin.get(ch) 成功读取返回true,失败(如EOF)返回false
if (ch == '\n') { // 遇到换行符,终止循环
break;
}
cout << "你输入的字符是:" << ch << " ,ASCII码:" << (int)ch << endl;
}
return 0;
}
测试用例
输入:a b 123(输入后按回车)
输出:
你输入的字符是:a ,ASCII码:97
你输入的字符是: ,ASCII码:32
你输入的字符是:b ,ASCII码:98
你输入的字符是: ,ASCII码:32
你输入的字符是:1 ,ASCII码:49
你输入的字符是:2 ,ASCII码:50
你输入的字符是:3 ,ASCII码:51
三、cin.get(ch) vs cin >> ch 核心区别
| 特性 | cin.get(ch) |
cin >> ch |
|---|---|---|
| 读取空白字符 | 读取(空格、换行、制表符都读) | 跳过(只读取非空白字符) |
| 返回值 | 成功返回 cin 对象(可判断) |
成功返回 cin 对象 |
| 适用场景 | 读取含空格的字符/逐字符处理 | 读取无空格的字符/数字 |
对比示例
#include <iostream>
using namespace std;
int main() {
char ch1, ch2;
cout << "测试 cin >> ch:" << endl;
cin >> ch1; // 输入 " x",会跳过空格,读取 'x'
cout << "cin >> ch 读取的字符:" << ch1 << endl;
// 清空输入缓冲区(避免残留字符影响)
cin.ignore();
cout << "测试 cin.get(ch):" << endl;
cin.get(ch2); // 输入 " y",会读取第一个空格
cout << "cin.get(ch) 读取的字符:" << ch2 << " ,ASCII码:" << (int)ch2 << endl;
return 0;
}
输入:
x
y
输出:
测试 cin >> ch:
cin >> ch 读取的字符:x
测试 cin.get(ch):
cin.get(ch) 读取的字符: ,ASCII码:32
四、cin.get(ch) 的常见实用场景
场景1:读取含空格的整行字符(替代 cin >> string)
#include <iostream>
using namespace std;
int main() {
char str[100];
char ch;
int i = 0;
cout << "输入含空格的字符串:" << endl;
// 逐字符读取,直到换行或数组满
while (cin.get(ch) && ch != '\n' && i < 99) {
str[i++] = ch;
}
str[i] = '\0'; // 手动加结束符,构成合法C风格字符串
cout << "你输入的字符串是:" << str << endl;
return 0;
}
输入:hello world 123 → 输出:你输入的字符串是:hello world 123
场景2:处理之前你写的“大小写转换”(支持含空格输入)
#include <iostream>
using namespace std;
int main() {
char ch;
cout << "输入任意字符(支持空格):" << endl;
while (cin.get(ch) && ch != '\n') {
if (ch >= 'a' && ch <= 'z') {
cout << (char)(ch - 32); // 小写转大写
} else if (ch >= 'A' && ch <= 'Z') {
cout << (char)(ch + 32); // 大写转小写
} else {
cout << ch; // 其他字符(包括空格)直接输出
}
}
return 0;
}
输入:ABC Def Gh123 → 输出:abc dEF gH123
五、注意事项
- 输入缓冲区:如果之前用
cin >>读取过数据,输入缓冲区可能残留换行符,导致cin.get(ch)直接读取到换行符。此时需要用cin.ignore()清空缓冲区:cin.ignore(); // 忽略缓冲区中第一个字符(通常是换行) // 或清空所有残留:cin.ignore(numeric_limits<streamsize>::max(), '\n'); - 返回值判断:
cin.get(ch)读取失败(如遇到文件结束符 EOF)时返回false,可用于终止循环(如while (cin.get(ch)))。 - 字符数组结束符:用
cin.get(ch)拼接字符数组时,最后必须手动加'\0',否则无法正常作为字符串使用。
总结
cin.get(ch)用于读取单个任意字符(包括空格、换行),是逐字符处理输入的核心函数;- 和
cin >> ch的核心区别是是否读取空白字符,按需选择; - 实用场景:处理含空格的输入、逐字符遍历字符串、精准控制输入读取。
0 条评论
目前还没有评论...
信息
- ID
- 844
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 2
- 上传者