C++
输入输出
cin与cout
标准输入与输出cin,cout
标准错误流 cerr
标准日志流 clog
cin
cin 可以连续从键盘读取数据,分隔符:空格、tab键、换行(回车)
cin>>等价于cin>>operator>>(),即调用成员函数来获取数据
输入数据完成后,需要再按下回车键程序才能进行下一步,且回车键的\r会被转换成\n。
缓冲区为空的时候,成员函数会阻塞等待数据的到来,一旦出现’\0’,成员函数就会读取数据,如果第一个字符是分割字符,则自动忽略并清除,取下一个字符,直到遇见下一个分割符就停止读取数据。 但是余下的字符串并没有清空,此时cin会直接从剩余的字符串中读取,跳过请求输入
例:
** cin.getline()**
用于接收字符串,有两种形式
char str[100];
cin.getline(str,n);//第一个参数往哪里写,第二个参数,写多少个字符,实际有效字符n-1,最后一个字符为\0
cin.getline(str,n,'c')//多的参数标示遇到‘c’字符就停止读取
cin.get()
一种用于接收字符,另一种用于接收单个字符串
char c;
c = cin.get();//也可以写成cin.get(c)
char str[100];
cin.getline(str,n);
cin.getline(str,n,'c')
//与cin.getline()一样
cin.gcount()
统计读入的字符串个数
cout << cin.gcount() << endl;
getline()
函数原型为:
istream& getline(istream &is,string &str,char delim)
参数1:一个输入流 比如cin
参数2: 从输入流读取的字符串放进str中,是string类型
参数3: 终止符,遇见这个字符就停止读入,默认情况下该字符为’\n’,即回车换行符
进行判断时,if(getline(cin,str)),只要cin输入流是有效,就会进行下一步
cin.get()与cin.getline()的区别
cin.get()不会读取并丢弃换行符,而是留在缓冲区,所以不能连续两次调用cin.get()
解决的方法:
调用一次之后,用cin.get()跳过换行符,再进行读取
也可以进行拼接使用:
char str[100];
cin.get(str,100).get();
cin.get(str,100)返回一个cin对象,然后继续调用get()
同理cin.getline()也可以调用两次