c++ cin>>用法

以下所有程序均默认在main函数中运行,省略其他的语句
(1) cin从输入缓冲区读取数据时,会跳过首个有效字符之前的[空格][Tab][换行]这些分隔符。

    char a;
    cout<<"input:";
    cin>>a;
    cout<<"char:"<<a  <<endl;

末尾的[回车]代表最后的输入结束,下同,不再提示
输入:[空格][Tab][回车]a[回车]
在这里插入图片描述
(2) cin读取字符成功后该字符之后的分隔符会残留在输入缓冲区。
介绍一个函数:istream& getline (istream& is, string& str);
Extracts characters from is and stores them into str until the newline character, ‘\n’.
用于捕获[换行]符,并将换行符之前的内容全都保存在str中,并且将’\n’直接从输入缓冲区中删除掉。

    char a;
    string test;
    cin>>a;
    getline(cin,test);//不阻塞
    cout<<a<<endl;
    cout<<"test:"<<test<<endl;

输入:a[回车]
这就是最后的那个[回车]被getline()截获,此时输入缓冲区为空,因此直接输出为空。
在这里插入图片描述
输入:a[空格]test[回车]
发现[空格]也被存储在test中,被打印出来。
在这里插入图片描述
(3) cin.get()用于获取输入缓冲区的第一个字符,不会忽略任何分隔符。读取成功后该字符之后的数据继续残留在输入缓冲区。

    char a,b;
    string str;
    cout<<"input:";
    a=cin.get();
    cin.get(b);
    getline(cin,str);
    cout<<"a:"<<a  <<endl;
    cout<<"b:"<<b  <<endl;
    cout<<"str:"<<str  <<endl;

输入:a[回车][空格][空格]dd[回车]
发现b多输出了一个空行,这是因为输入的第二个字符[回车]被存入b打印出来,然后再打印最后的endl。剩余的[空格][空格]dd被存入了str打印出来。
在这里插入图片描述
(4) 使用cin.get ( char* s, int len )读取一行数据,n为目标空间的大小。

    char a;
    char p[10]={};
    cin.get(p,10);
    cin.get(a);
    cout<<"a:"<<a  <<endl;
    cout<<"strlen(p):"<<strlen(p)  <<endl;

输入:a[空格]b[空格]c
cin.get遇到回车时结束读取数据,将’\n’之前的内容存入目标空间,不对’\n’做任何处理。之后’\n’被a获取。
在这里插入图片描述
(5) 在while()循环中输入数据,ctrl+d只能用于结束接受char类型数据。

    vector<char> v;
    char c;
    cout << "inout:";
    while (cin>>c)
        v.push_back (c);
    cout << "v.size()= " << int(v.size()) << endl;
    for(auto & x:v)
        cout<<x<<" ";

在这里插入图片描述
在遇到int型数据时,ctrl+d并不会起作用。只能通过输入一个非数字的字符来结束输入。因为非数字字符不是int型数据,因此while()判断为false,跳出循环。

    vector<int> v;
    int c;
    cout << "inout:";
    while (cin>>c)
        v.push_back (c);
    cout << "v.size()= " << int(v.size()) << endl;
    for(auto & x:v)
        cout<<x<<" ";

在这里插入图片描述
(6) 在while()循环中连续对两个vector< int >输入数据。在第一个 while(cin>>tmpVal)后使用 cin.clear()来清除flase状态,并用cin.ignore()来忽略这个无效的字符。在第二个 while(cin>>tmpVal)才可以继续接受输入。

    vector<int> a;
    vector<int> b;
    int tmpVal;
    cout<<"input A:";
    while(cin>>tmpVal)
        a.push_back(tmpVal);
    cin.clear();    //清除错误状态
    cin.ignore();   //跳过无效数据
    cout<<"input B:";
    while(cin>>tmpVal)
        b.push_back(tmpVal);
    cin.clear();   
    cin.ignore();
    cout<<"output A:";
    for(auto & x:a)
        cout<<x<<" ";
    cout<<endl;
    cout<<"output B:";
    for(auto & x:b)
        cout<<x<<" ";
    cout<<endl;

在这里插入图片描述

  • 15
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值