全网整合营销服务商

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

免费咨询热线: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 为条件及注意事项说明  # 区中  # 回车键  # 指的是  # 第一个  # 给大家  # 中为  # 为空  # 分隔符  # 也会  # 还在  # 换行符  # 中有  # 下了  # 是从  # 将其  # 这段  # 希望能  # 这个时候  # 作为一个  # 不做 


相关文章: ,在苏州找工作,上哪个网站比较好?  定制建站流程步骤详解:一站式方案设计与开发指南  宝塔建站无法访问?如何排查配置与端口问题?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  如何配置IIS站点权限与局域网访问?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何挑选优质建站一级代理提升网站排名?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  教程网站设计制作软件,怎么创建自己的一个网站?  个人网站制作流程图片大全,个人网站如何注销?  如何用PHP快速搭建CMS系统?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  建站主机类型有哪些?如何正确选型  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  成都网站制作报价公司,成都工业用气开户费用?  济南专业网站制作公司,济南信息工程学校怎么样?  建站ABC备案流程中有哪些关键注意事项?  建站主机选择指南:服务器配置与SEO优化实战技巧  建站之星官网登录失败?如何快速解决?  如何基于云服务器快速搭建个人网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  学校为何禁止电信移动建设网站?  微信推文制作网站有哪些,怎么做微信推文,急?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  香港服务器租用费用高吗?如何避免常见误区?  如何在Golang中指定模块版本_使用go.mod控制版本号  宝塔建站后网页无法访问如何解决?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星安装后如何自定义网站颜色与字体?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  建站之星如何实现五合一智能建站与营销推广?  淘宝制作网站有哪些,淘宝网官网主页?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  MySQL查询结果复制到新表的方法(更新、插入)  建站之星各版本价格是多少?  如何在IIS中新建站点并配置端口与IP地址?  建站主机如何选?性能与价格怎样平衡?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  建站VPS配置与SEO优化指南:关键词排名提升策略  北京专业网站制作设计师招聘,北京白云观官方网站?  名字制作网站免费,所有小说网站的名字?  linux top下的 minerd 木马清除方法  如何用搬瓦工VPS快速搭建个人网站?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  开封网站制作公司,网络用语开封是什么意思? 

您的项目需求

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