【C++】输入输出流 ④ ( cin 输入流对象 | cin.getline() 函数分析 | cin.getline() 函数输入字符超过所需字符个数 | 输入缓冲区 数据截取 )






一、cin.getline() 函数




1、cin.getline() 函数


cin.get() 函数 不能接收 空格字符 , 如果输入的字符中存在空格 , 则 空格之后的数据直接被丢弃 ;

如果想要从 标准输入流中 读取空格字符 , 就需要使用 cin.getline() 函数 ;


cin.getline() 函数 , 用于从 标准输入流 ( 键盘 ) 中读取一行字符串 , cin.getline() 函数在<iostream>头文件中定义 , 使用前需导入该头文件 ;

#include "iostream"

cin.getline() 函数原型如下 , 接收 2 个参数 , 第一个参数是 char* 指针 , 第二个参数是读取字符个数 ;

    basic_istream& __CLR_OR_THIS_CALL getline(
        _Elem* _Str, streamsize _Count) {
    
     // get up to _Count characters into NTCS, discard newline
        return getline(_Str, _Count, _Myios::widen('\n'));
    }

代码示例 : 先定义字符数组 buf , 然后调用 cin.getline 函数 , 从 标准输入流 中读取字符串到 buf 数组中 , 最大读取 64 个字符 ;

	char buf[64];
	cin.getline(buf, 64);

调用 cin.getline 函数后 , 命令行会阻塞 , 等待用户输入 ,

输入若干字符完毕后 , 按下回车键 , 继续向后执行 ;


2、代码示例 - cin.getline() 函数


在下面的代码中 , 读取 “hello world” 字符串 , 其中可以读取 空格字符 ;


代码示例 :

#include "iostream"
using namespace std;

int main() {
    
    

	char buf[64];

	// 读取 字符串 到 字符数组变量 中
	// 读取 64 字节
	cin.getline(buf, 64);

	// 输出接收的数据
	cout << buf << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

hello world
hello world
请按任意键继续. . .


执行后 , 命令行阻塞 , 等待用户从键盘输入字符 ;

在这里插入图片描述

输入带空格的字符串 “hello world” , 输入到 输入缓冲区 中 ,

在这里插入图片描述

然后点击回车 , 将 输入缓冲区 中的数据 读取到 buf 数组中 , 并打印出来 ;

在这里插入图片描述


3、cin.getline() 函数输入字符超过所需字符个数 ( 输入缓冲区 数据截取 )


如果在 cin.getline() 函数中 , 读取 7 字节字符 ,

	// 读取 字符串 到 字符数组变量 中
	// 读取 7 字节
	cin.getline(buf, 7);

输入缓冲区 中 , 可以接收 超过 7 字节的字符 ;

但是 , 如果在命令行中输入超过 6 字节字符 , 只能取 输入缓冲区中 前 6 字节字符 到 buf 数组中 ;


代码示例 : 读取 7 字节数据 , 只能从输入缓冲区中读取 6 字节数据 , 然后 在尾部增补 ‘\0’ 字符 , 凑够 7 字节数据 ;

#include "iostream"
using namespace std;

int main() {
    
    

	char buf[8];

	// 读取 字符串 到 字符数组变量 中
	// 读取 7 字节
	cin.getline(buf, 7);

	// 输出接收的数据
	cout << buf << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

123456789
123456
请按任意键继续. . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/134845353
今日推荐