文章目录
一、cin.get() 函数获取一个字符数据并返回 ( 无参数 )
1、cin.get() 函数获取一个字符数据
cin.get() 函数 , 一次从键盘输入一个字符 , 如果 按下 Ctrl + Z 会产生 EOF 也就是 -1 值 ;
调用 cin.get() 函数 后 , 会阻塞等待用户输入 , 用户输入一个字符 , 就会继续执行后续代码 , 如果用户按下 Ctrl + Z 组合键 , cin 会收到 EOF 值 ;
调用 cin.get() 函数 , 是将数据读取一字节到 输入缓冲区中 ,
同理 , 写出数据时 , 也是先写出到 输出缓冲区 , 然后再写出到输出流中 ;
从 键盘 输入到 输入缓冲区 中的数据 , 可以逐个字节获取 , 也可以一次性获取多个字节 ;
2、输入流缓冲区概念
在 C++语言中 中 , 标准输入流 和 标准输出流 是 预定义的文件流对象 ,
- 标准输入流 对应于 键盘输入
- 标准输出流 对应于 屏幕输出
标准输入流 和 标准输出流 对象可以在程序中 读取输入数据或写入输出数据 ;
输入缓冲区 和 输出缓冲区 是与 标准输入流 和 标准输出流 相关联的缓冲区 , 用于提高 I/O 操作的效率 ;
-
输入缓冲区 : 当向 输入流 写入数据时 , 数据首先被写入 输入缓冲区 , 而不是直接写入到程序中 ; 当 输入缓冲区 写满时 , 数据会一次性写入磁盘 ;
-
输出缓冲区 : 当 程序 向 文件 写出 数据时 , 数据首先被 写出到 输出缓冲区 , 这种缓冲机制可以减少磁盘 I/O 操作的次数 , 从而提高程序的性能 ;
3、代码示例 - cin.get() 函数获取一个字符数据
代码示例 :
#include "iostream"
using namespace std;
int main() {
char c;
while (c = cin.get() != EOF)
{
// 输出接收的数据
cout << c << endl;
}
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
在命令行中 , 输入 helloworld 字符后 , 数据只是进入到缓冲区中 , 并没有真正读取到应用程序中 ,
在上面的情况下 , 按下回车 , 才开始执行 循环中的语句 , 逐个打印接收的字符 ;
如果想要停止读取 , 按下 Ctrl + Z 按键 , 此时 EOF 被读取到 缓冲区了 ,
然后按下回车 , EOF 被正式读取到应用程序中 , 应用中接到 EOF 字符 , 直接终止循环 , 继续向后执行程序代码 ;
二、cin.get(char c) 函数获取一个字符数据到变量中 ( 1 个参数 )
1、cin.get(char c) 函数获取一个字符数据到变量中
首先 , 声明 char 类型的变量 ;
char a, b, c;
然后 , 调用 cin.get(char c) 函数获取一个字符 , 将获取的字符数据 保存到 变量 c 中 ;
cin.get(c);
2、完整代码示例 - cin.get(char c) 函数获取一个字符数据到变量中
完整代码示例 :
#include "iostream"
using namespace std;
int main() {
char a, b, c;
// 读取字符到变量中
cin.get(a);
cin.get(b);
cin.get(c);
// 输出接收的数据
cout << "a = " << a << " , b = " << b << " , c = " << c << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
输入 3 个字符 “123” , 此时 3 个字符 写入到 cin 输入流 的 输入缓冲区中 ;
然后 , 点击回车键 , 将 输入缓冲区 中的数据 写入到 输入流中 ;
如果输入多个字符 , 如下情况 , 输入了 “123456789” 等 9 个字符 到 输入缓冲区 中 , 按下回车后 , 只会将前 3 个字符读取到 输入流中 , 后面多余的字符会被自动忽略掉 ;