cin,cin.get(),getchar(),getline(),cin.get line()异同点

打印 上一主题 下一主题

主题 1518|帖子 1518|积分 4554

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.cin

(1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
(2)当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab 或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等候。但是假如读取乐成,字符背面的分隔符是残留在缓冲区的,cin>>不做处理。假如后续接getline()要记得处理换行符!
(3)不想略过空白字符,那就使用 noskipws 流控制。比如cin>>noskipws>>input;
  1. using namespace std;
  2. int main()
  3. {
  4.     char n,m,k,p,q;
  5.     cin>>std::noskipws>>n>>m>>k>>p>>q;//保留空格    cout<<n<<endl;
  6.     cout<<m<<endl;
  7.     cout<<k<<endl;
  8.     cout<<p<<endl;
  9.     cout<<q<<endl;
  10.     system("pause");
  11. }
  12. 输入:q w e a z
  13. 输出:
  14. q
  15. w
  16. e
  17. #include<iostream> #include<string> using namespace std;
  18. int main ()
  19. {
  20.     char a;
  21.     cin>>a;//cin不吃掉换行符的,在缓存里面还有换行符。
  22.     char b[10];
  23.     cin.getline(b,10);//这行语句不成功,因为换行符没有被吃掉
  24.     cout<<a<<endl;
  25.     cout<<b<<endl;
  26.     system("pause");
  27. }
复制代码
2.cin.get()

单用cin.get()只能读取此中一个字符,不能存储为string全部的字符,若要存储全部则必须传入一个数组以及长度
  1. using namespace std;
  2. main ()
  3. {
  4.     char a[n];
  5.     cin.get(a,n); //实际包括空格只能存n-1个字符,最后一个字符是'\n'以回车作为结束符。
  6.     cout<<a<<endl;
  7.     system("pause");
  8. }
复制代码
3.getchar()

缓冲区会把’enter’这个字符写进gets(str2),这时程序就会像上面那样,直接结束.而加了getchar();它会吃了缓冲区里的’enter’字符,这时间缓冲区才是真的什么都没有
4.cin.getline()

接受一个字符串,可以接收空格并输出,吃掉末尾的换行符的。
  1. using namespace std; int main ()
  2. {
  3. char m[20]; cin.getline(m,5); cout<<m<<endl;
  4. }
  5. 输入:jkljkljkl
  6. 输出:jklj
  7. 接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;
复制代码
延伸:
cin.getline()现实上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符)
当第三个参数省略时,系统默认为’\0’
假如将例子中cin.getline()改为cin.getline(m,5,‘a’);当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk
当用在多维数组中的时间,也可以用cin.getline(m,20)之类的用法:
  1. using namespace std;
  2. int main ()
  3. {
  4. char m[3][20];
  5. for(int i=0;i<3;i++)
  6. {
  7. cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
  8. cin.getline(m[i],20);
  9. }
  10. cout<<endl;
  11. for(int j=0;j<3;j++)
  12. cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
  13. }
  14. 请输入第1个字符串: kskr1
  15. 请输入第2个字符串:
  16. kskr2
  17. 请输入第3个字符串:
  18. kskr3
  19. 输出m[0]的值:kskr1 输出m[1]的值:kskr2 输出m[2]的值:kskr3
复制代码
5.getline()

接受一个字符串,可以接收空格并输出,
  1. using namespace std;
  2. int main ()
  3. {
  4. string str;
  5. getline(cin,str); //和cin.getline()一样可以按某个字符结尾
  6. cout<<str<<endl;
  7. }
  8. 输入:jkljkljkl 输出:jkljkljkl
  9. 输入:jkl jfksldfj jklsjfl 输出:jkl jfksldfj jklsjfl
  10. 和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表