以下所有程序均默认在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;

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信