全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++ cin 作为while条件(详解)

本文一切测试在windows clion中进行

在clion中,ctrl +z并不是文件结束符

在cmd中运行,只需要ctrl+z再加回车就可以得到正确结果

1、cin

cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。

在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

使用一个istream的对象作为条件时,效果是检查流的状态。若流有效,则检测成功,返回true。当遇到文件结束符或者无效的输入(比如用一个字符来作为一个整型数的输入时),istream的对象状态会变为无效。

总而言之:

(1)  输入数据时需要敲回车键才能将数据送到缓存器,cin才能读取缓存区的数据。

(2) 当cin遇到文件结束符(windows中为:ctrl +Z , Unix 中为:ctrl +D),或无效输入才能使cin状态无效。

一下这段测试代码将说明以上问题。

代码作用: 统计输入值中数据连续出现的次数。

因为无法判断输入数据的个数,所以无法采用一个定值来控制循环次数。这里我们使用cin来作为if 条件:

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {

  cout << "Enter a list of integers:" << std::endl;
  int currVal = 0;
  int val = 0;
  int cnt = 0;

  /*读入第一个输入的数据*/
  if ( cin >> currVal ){
    cnt = 1;
    /*循环读入之后的数据*/
    while( cin >> val ){
      /*如果当前读入的数据val与之前的数据currVal相等,cnt++*/
      if (currVal == val) {
        ++cnt;
      } else {
        /*如果不相等,输出之前数据currVal连续出现的次数,同时重新统计当前数据的连续出现次数*/
        cout << currVal << " occurs " << cnt << " times. " << endl;
        currVal = val;
        cnt = 1;
      }
    }
     /*打印最后一个数据的连续出现次数*/
    cout << currVal << " occurs " << cnt << " times. " << endl;
  }
  return 0;
}

(1)控制台输入 1 2 3 4 5 6 7加回车:

7的统计并没有显示,因为这个时候我们只是将数据push到了缓冲区,while中的cin读取到7,流的检测状态是true,所以并没有退出循环,还在等待下一个输入数据,不能执行while循环之外的代码,因此不能打印最后下一个数据7。

(2)控制台输入 1 2 3 4 5 6 7加ctrl+D:

 直接以ctrl+d结束数据,数据1到7没有提交到缓冲区,而if中的cin直接读取到文件结束符,流状态检测为false,if中的代码不能执行,直接结束程序运行。

(3)控制台输入1 2 3 4 5 6 7加回车:

再输入ctrl+D:

1到6的输出如(2)中所述,等我们再次输入文件结束符号时,cin流状态为false,结束while循环,因此执行while循环之外的代码,打印出最后一个数据7 的统计次数。

(4)控制台输入1 2 3 4 5 6 7 t 加回车:

我们输入1到7和t之后,再enter,将数据push到缓冲区。在while循环的条件中,cin逐个读入到val中,再执行循环体中的代码,最后读到t时,企图将字符存入到int型的变量中,无效输入导致流状态为false,种植while循环,可以打印出最后一个数据的统计信息。

以上这篇c++ cin 作为while条件(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# c  # while  # cin  # 浅谈c++中的while(cin)问题  # C++while和do-while语句求和详解  # 在while中使用cin>>a 为条件及注意事项说明  # 区中  # 回车键  # 指的是  # 第一个  # 给大家  # 中为  # 为空  # 分隔符  # 也会  # 还在  # 换行符  # 中有  # 下了  # 是从  # 将其  # 这段  # 希望能  # 这个时候  # 作为一个  # 不做 


相关文章: 网站制作服务平台,有什么网站可以发布本地服务信息?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何制作算命网站,怎么注册算命网站?  实例解析angularjs的filter过滤器  公司网站制作价格怎么算,公司办个官网需要多少钱?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  网站图片在线制作软件,怎么在图片上做链接?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  建站之星伪静态规则如何正确配置?  如何用景安虚拟主机手机版绑定域名建站?  建站之星2.7模板快速切换与批量管理功能操作指南  如何将凡科建站内容保存为本地文件?  如何正确选择百度移动适配建站域名?  如何选择适配移动端的WAP自助建站平台?  平台云上自主建站:模板化设计与智能工具打造高效网站  韩国服务器如何优化跨境访问实现高效连接?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  建站之星云端配置指南:模板选择与SEO优化一键生成  如何快速搭建虚拟主机网站?新手必看指南  网站制作壁纸教程视频,电脑壁纸网站?  网站app免费制作软件,能免费看各大网站视频的手机app?  h5在线制作网站电脑版下载,h5网页制作软件?  如何挑选最适合建站的高性能VPS主机?  广州美橙建站如何快速搭建多端合一网站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  建站之星如何实现五合一智能建站与营销推广?  建站主机与服务器功能差异如何区分?  如何快速搭建高效服务器建站系统?  定制建站价位费用解析与套餐推荐全攻略  大连 网站制作,大连天途有线官网?  如何在云主机上快速搭建多站点网站?  如何选择建站程序?包含哪些必备功能与类型?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  ,柠檬视频怎样兑换vip?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  高端网站建设与定制开发一站式解决方案 中企动力  在线制作视频的网站有哪些,电脑如何制作视频短片?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何快速生成橙子建站落地页链接?  家具网站制作软件,家具厂怎么跑业务?  长沙做网站要多少钱,长沙国安网络怎么样?  建站主机选购指南:核心配置优化与品牌推荐方案  建站之星如何一键生成手机站?  如何选择靠谱的建站公司加盟品牌?  建站之星×万网:智能建站系统+自助建站平台一键生成  建站OpenVZ教程与优化策略:配置指南与性能提升  个人网站制作流程图片大全,个人网站如何注销?  寿县云建站:智能SEO优化与多行业模板快速上线指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。