C++循环文本输入-cin、cin.get(char)、cin.fail()

举报
王博Kings 发表于 2020/12/30 00:25:19 2020/12/30
【摘要】 1.最简单的: 如果程序要使用循环来读取来自键盘的文本输入,并且遇到'#'字符时就停止读取输入 //循环使用cin#include<iostream>int main(){ using namespace std; char ch; int count = 0; cout << "输入字符串;以# 表示退出: \n"; cin >> ch; while (ch!='#'...

1.最简单的:

如果程序要使用循环来读取来自键盘的文本输入,并且遇到'#'字符时就停止读取输入


  
  1. //循环使用cin
  2. #include<iostream>
  3. int main()
  4. {
  5. using namespace std;
  6. char ch;
  7. int count = 0;
  8. cout << "输入字符串;以# 表示退出: \n";
  9. cin >> ch;
  10. while (ch!='#')
  11. {
  12. cout << ch;
  13. ++count;
  14. cin >> ch;
  15. }
  16. cout << endl << count << "字节\n";
  17. system("pause");
  18. return 0;
  19. }

输入:my name is hello#world!

观察输出结果,发现确实以‘#’为截止符,但是为什么程序在输出时省略了空格呢?原因在于cin,读取char值的时候,与读取其他基本类型一样,cin将忽略空格和换行符,所以空格没被显示,也没被计数。 


2. 使用cin.get(char)进行补救


  
  1. //循环使用cin.get()
  2. #include<iostream>
  3. int main()
  4. {
  5. using namespace std;
  6. char ch;
  7. int count = 0;
  8. cout << "输入字符串;以# 表示退出: \n";
  9. cin.get(ch); //替换 cin >> ch;
  10. while (ch != '#')
  11. {
  12. cout << ch;
  13. ++count;
  14. cin.get(ch); //替换 cin >> ch;
  15. }
  16. cout << endl << count << "字节\n";
  17. system("pause");
  18. return 0;
  19. }

输入:my name is hello#world!

此时,空格也被记录下来。 

(备注:有的同学会很好奇,cin.get()似乎能够有1个参数,也可以2个参数,这到底怎么使用?这个其实是C++重载特性)


 3. 进阶:假如'#'本身就有用,那么岂不是这个截止符 还要换?答案是:不必麻烦!有文件尾条件EOF

 使用CTRL+Z  <ENTER>来模仿结束


  
  1. //循环使用cin.get() ,截止符EOF默认
  2. #include<iostream>
  3. int main()
  4. {
  5. using namespace std;
  6. char ch;
  7. int count = 0;
  8. cout << "输入字符串;以# 表示退出: \n";
  9. cin.get(ch); //替换 cin >> ch;
  10. while (cin.fail() == false ) //替换 while(ch != '#')
  11. {
  12. cout << ch;
  13. ++count;
  14. cin.get(ch); //替换 cin >> ch;
  15. }
  16. cout << endl << count << "字节\n";
  17. system("pause");
  18. return 0;
  19. }

备注:51字节,其实包含了最后CTRL+Z这一个。 

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/84304185

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。