【C++】输入输出流 ③ ( cin 输入流对象 | cin.get() 函数获取一个字符数据并返回 | cin.get(char c) 函数获取一个字符数据到变量中 )






一、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 个字符读取到 输入流中 , 后面多余的字符会被自动忽略掉 ;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/134821569