std::cin
cin>>
cin>>
用于连续从键盘中读取想要的数据以,空格;tab;换行作为分隔符
cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。
在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。
需要注意
- cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
- 当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。
- 不想略过空白字符,那就使用 noskipws 流控制。比如cin>>noskipws>>input;
从标准输入读取一行字符串的方法
getline读取一行
C++中定义了一个在std名字空间的全局函数getline,因为这个getline
函数的参数使用了string
字符串,所以声明在了<string>
头文件中了。
getline
利用cin
可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
函数原型有两个重载形式:
istream& getline ( istream& is, string& str);//默认以换行符结束
istream& getline ( istream& is, string& str, char delim)
例如
#include <iostream>
#include <string>
using namespace std;
int main() {
int flag;
cout << "please cin a number" << endl;
cin >> flag;
cout << "flag: " << flag << endl;
cin >> flag;
cout << "flag: " << flag << endl;
if (flag == 1)
cout << "true" << endl;
else {
cout << "false" << endl;
}
string data;
getline(cin, data);
cout << "data: " << data << "data size is :" << data.size() << endl;
return 0;
}
输出
please cin a number
1 2 3 4 5 4
flag: 1
flag: 2
false
data: 3 4 5 4data size is :8
tip: cin会从输入缓冲区读取,以空格,tab,回车为界限,而getline会把空格,tab读进来