全网整合营销服务商

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

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


相关文章: 建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  Python如何创建带属性的XML节点  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  宝塔建站助手安装配置与建站模板使用全流程解析  如何通过服务器快速搭建网站?完整步骤解析  建站之星IIS配置教程:代码生成技巧与站点搭建指南  教学网站制作软件,学习*后期制作的网站有哪些?  如何在阿里云高效完成企业建站全流程?  如何快速生成橙子建站落地页链接?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何在IIS中配置站点IP、端口及主机头?  制作网页的网站有哪些,电脑上怎么做网页?  音响网站制作视频教程,隆霸音响官方网站?  C++如何使用std::optional?(处理可选值)  阿里云网站制作公司,阿里云快速搭建网站好用吗?  建站主机核心功能解析:服务器选择与网站搭建流程指南  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  C++中引用和指针有什么区别?(代码说明)  如何快速搭建FTP站点实现文件共享?  html制作网站的步骤有哪些,iapp如何添加网页?  网页设计与网站制作内容,怎样注册网站?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  网站图片在线制作软件,怎么在图片上做链接?  制作门户网站的参考文献在哪,小说网站怎么建立?  javascript中对象的定义、使用以及对象和原型链操作小结  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  网站代码制作软件有哪些,如何生成自己网站的代码?  如何在云主机上快速搭建网站?  建站与域名管理如何高效结合?  宿州网站制作公司兴策,安徽省低保查询网站?  如何在云主机上快速搭建多站点网站?  建站主机如何选?高性价比方案全解析  如何用y主机助手快速搭建网站?  如何通过PHP快速构建高效问答网站功能?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  如何规划企业建站流程的关键步骤?  如何制作一个表白网站视频,关于勇敢表白的小标题?  存储型VPS适合搭建中小型网站吗?  建站之星安装后界面空白如何解决?  建站之星与建站宝盒如何选择最佳方案?  如何使用Golang安装API文档生成工具_快速生成接口文档  郑州企业网站制作公司,郑州招聘网站有哪些?  如何正确下载安装西数主机建站助手?  ,想在网上投简历,哪几个网站比较好?  官网网站制作腾讯审核要多久,联想路由器newifi官网  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站? 

您的项目需求

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