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

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

1.最简单的:

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


      //循环使用cin
      #include<iostream>
      int main()
      {
     	using namespace std;
     	char ch;
     	int count = 0;
     	cout << "输入字符串;以# 表示退出: \n";
     		cin >> ch;
     	while (ch!='#')
      	{
     		cout << ch;
      		++count;
     		cin >> ch;
      	}
     	cout << endl << count << "字节\n";
      	system("pause");
     	return 0;
      }
  
 

输入:my name is hello#world!

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


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


      //循环使用cin.get() 
      #include<iostream>
      int main()
      {
     	using namespace std;
     	char ch;
     	int count = 0;
     	cout << "输入字符串;以# 表示退出: \n";
     	cin.get(ch); //替换 cin >> ch;
     	while (ch != '#')
      	{
     		cout << ch;
      		++count;
     		cin.get(ch);   //替换 cin >> ch;
      	}
     	cout << endl << count << "字节\n";
      	system("pause");
     	return 0;
      }
  
 

输入:my name is hello#world!

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

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


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

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


      //循环使用cin.get() ,截止符EOF默认
      #include<iostream>
      int main()
      {
     	using namespace std;
     	char ch;
     	int count = 0;
     	cout << "输入字符串;以# 表示退出: \n";
     	cin.get(ch); //替换 cin >> ch;
     	while (cin.fail() == false )  //替换 while(ch != '#')
      	{
     		cout << ch;
      		++count;
     		cin.get(ch);   //替换 cin >> ch;
      	}
     	cout << endl << count << "字节\n";
      	system("pause");
     	return 0;
      }
  
 

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

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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