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 函数后 , 命令行会阻塞 , 等待用户输入 ,
输入若干字符完毕后 , 按下回车键 , 继续向后执行 ;
在下面的代码中 , 读取 “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 数组中 , 并打印出来 ;
如果在 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
请按任意键继续. . .