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

技术
©2020 ioDraw All rights reserved
在上海做什么赚钱快?这10个你可以试一试!PHP 先返回结果到前端,PHP代码继续执行后续的任务centos7部署springboot jar包 疫情过后 学哪个编程有前景安卓开发—根据顾客预算显示食物信息苹果iPhone 12全系售价泄露:官方最高售价近1万元log4j打印异常堆栈信息的方法PTA快速排序日经:索尼和铠侠正积极申请华为供货许可一个学生关于鸿蒙系统的一些看法