c++ cin的使用说明

本文详细介绍了C++中cin的相关用法。包括cin<<可连续从键盘读取数据,以空格等为分隔符;cin.get()可读取单个字符或一行,不忽略分隔符;cin.getline不会残留结束符或换行符;cin.ignore可清空输入缓冲区,避免上次输入影响下次输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


cin是C++编程语言中的标准输入流对象,即istream类的对象。
在理解cin功能时,不得不提 标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。
cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。 cin有几种不同的读取方法,下面我们一一介绍:cin>>,cin.get,cin.getline

1.cin<<

cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。

#include <iostream>
using namespace std;
int main()
{
    char a;
    int b;
    float c;
    cin>>a>>b>>c;
    cout<<a<<" "<<b<<" "<<c<<" "<<endl;
    return 0;
}

这里要注意cin<<等价于cin.operator>>();当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理;不想略过空白字符,可以使用cin>>noskipws>>input;
而getline不会忽略换行符,因此,下面代码getline不会出现阻塞,直接读取换行符,再将换行符替换为空字符’\0’,因此程序中的test为空串。

int main()
{
    char a;
    int b;
    float c;
    string str;
    cin>>a>>b>>c>>str;
    cout<<a<<" "<<b<<" "<<c<<" "<<str<<endl;
    string test;
    getline(cin,test);//不阻塞
    cout<<"test:"<<test<<endl;
    system("pause");
    return 0;
}

2.cin.get()

cin.get是读取单个字符。
注意:cin.get()从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取;cin.get()的返回值是int类型,成功:读取字符的ASCII码值,遇到文件结束符时,返回EOF,即-1,Windows下标准输入输入文件结束符为Ctrl+z,Linux为Ctrl+d。cin.get(char var)如果成功返回的是cin对象,因此可以支持链式操作,如cin.get(b).get©。

#include <iostream>
using namespace std
int main()
{
    char a;
    char b;
    a=cin.get();
    cin.get(b);
    cout<<a<<b<<endl;
    return 0;
}

cin.get读取一行。输入:123213213[enter] 输出:array=123213213,a=[enter];读取一行时,遇到换行符时结束读取,但是不对换行符进行处理,换行符仍然残留在输入缓冲区。第二次由cin.get()将换行符读入变量a,换行符的ASCII码值为10。这也是cin.get()读取一行与使用getline读取一行的区别所在。getline读取一行字符时,默认遇到’\n’时终止,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理。

char a;
char array[20]={NULL}; 
cin.get(array,20);
cin.get(a);
cout<<array<<" "<<a<<endl;

3. cin.getline

cin.getline与cin.get的区别是,cin.getline不会将结束符或者换行符残留在输入缓冲区中;在遇到需要输入一串带有空格的字符串的时候,要用getline(cin,s),因为cin>>s,遇到空格就会默认停止。

#include <iostream>
using namespace std;
int main()
{
    char array[20]={NULL};
    cin.getline(array,20); //或者指定结束符,使用下面一行
    //cin.getline(array,20,'\n');
    cout<<array<<endl;
    system("pause");
    return 0;
}

4. cin.ignore

①cin.ignore清空了输入缓冲区的当前行,使上次的输入残留下的数据没有影响到下一次的输入,这就是ignore()函数的主要作用。其中,numeric_limits::max()不过是头文件定义的流使用的最大值,你也可以用一个足够大的整数代替它。
②如果想清空输入缓冲区,去掉换行符,使用:
cin.ignore(numeric_limits< std::streamsize>::max()); 清除cin里所有内容。

③cin.ignore();当输入缓冲区没有数据时,也会阻塞等待数据的到来。
参考
C++ cin的详细用法
C++中关于输入cin的一些总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值