标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog 4个流对象,cin是输入流,cout、cerr、clog是输出流。

cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符

注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。

例如:

    int a,b;cin>>a>>b;

若从键盘上输入
21 abc↙
变量a从输入流中提取整数21,提取操作成功,此时cin流处于正常状态。但在变量b准备提取一个整数时,遇到了字母a,显然提取操作失败了,此时,cin流被置为出错状态。只有在正常状态时,才能从输入流中提取数据。

当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输入流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作将终止。在 IBM PC及其兼容机中,以Ctrl + Z表示文件结束符。在UNIX和Macintosh系统中,以 Ctrl + D表示文件结束符。当输入流cin处于出错状态时,如果测试cin的值,可以发现它的值为false(假),即cin为0值。如果输入流在正常状态,cin的值为true(真),即cin为 一个非0值。可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。如:

  if(!cn) //流cin处于出销状态,无法正常提取数据cout<<"error";

[例13.5] 通过测试cin的真值,判断流对象是否处于正常状态。

#include <iostream>
using namespace std;
int main( )
{float grade;cout<<"enter grade:";while(cin>>grade)//能从cin流读取数据{if(grade>=85) cout<<grade<<"GOOD!"<<endl;if(grade<60) cout<<grade<<"fail!"<<endl;cout<<"enter grade:";}cout<<"The end."<<endl;return 0;
}

流提取符“>>”不断地从流中提取数据(每次提取一个浮点数),如果成功,就陚给 grade,此时cin为真,若不成功则cin为假。如果键入文件结束符,表示数据已完。

运行情况如下:
enter grade: 67↙
enter grade: 89↙
89 GOOD!
enter grade: 56↙
56 fail!
enter grade: 100↙
100 GOOD!
enter grade: ^Z↙//键入文件结束符
The end.

在遇到文件结束符时,程序结束。如果某次输入的数据为
enter grade: 100/2↙
流提取符”>>”提取100,赋给grade,进行if语句的处理。然后再遇到”/”,认为是无效字符,cin返回0。循环结束,输出”The end.”。

在不同的C++系统下运行此程序,在最后的处理上有些不同。以上是在GCC环境下运行程序的结果,如果在VC++环境(使用win7系统)下运行此程序,在键入Ctrl + Z 时,需要敲击两次回车,程序才输出”The end.”。

C++—— cin输入流详解相关推荐

  1. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符

    在程序中一般用cout和插入运算符"<<"实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过 ...

  2. cin.ignore()详解

    cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确. 有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用c ...

  3. C++输入cin应用详解

    输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据 ...

  4. C++中getline()与cin.getline()详解

    参考1:https://www.jb51.net/article/180408.htm 参考2:https://www.cnblogs.com/ymd12103410/p/9514896.html

  5. c语言putchar与getchar,C语言中的getchar和putchar详解

    首先给出<The_C_Programming_Language>这本书中的例子: #include int main() { int c; c = getchar(); while (c  ...

  6. C++ cin 详解之终极无惑

    代码编译运行环境:VS2017+Win64+Debug. 文章目录 1.简介 2.常用输入方法 2.1 cin>> 的用法 2.2 cin.get() 的用法 2.2.1 cin.get( ...

  7. c语言getline作用,C++ cin.getline及getline()用法详解

    下面先看下C++ cin.getline用法,具体内容如下所示: 使用 C++ 字符数组与使用 string 对象还有另一种不同的方式,就是在处理它们时必须使用不同的函数集.例如,要读取一行输入,必须 ...

  8. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】

    故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...

  9. C++输入cin详解

    C++输入cin详解 输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函 ...

最新文章

  1. REVERSE-PRACTICE-BUUCTF-15
  2. 百度统计:网站统计实时访客报告
  3. 25linux运行级别26如何找到root密码?27linux下面帮助指令
  4. nginx+php5-fpm安装
  5. 浅谈堆栈问题-C++
  6. 台湾大学生来厦门参访交流
  7. CentOS7安装GNOME可视化界面 和 远程访问
  8. SQL语句之表的创建和使用
  9. cppc文件无法正常输出汉字,将文件修改为UTF-8格式
  10. springboot微服务使用Feign远程调用失败
  11. LDC(logic data center)与传统的(Internet Data Center-IDC)架构对比与优势(淘宝双十一经典案例解析)
  12. 标签云的实现(使用jQuery插件jqcloud)
  13. java代码设置路由
  14. linux kernel debug 之 CallTrace
  15. Element-UI组件之其他Others
  16. 内存池简单实现(一)
  17. python爬虫——爬取图书馆借阅数据
  18. 动态规划之 0-1 背包问题
  19. python与c/c++相比的优势
  20. 视音频数据处理入门:H.264视频码流解析(java)

热门文章

  1. table表格for循环绑定数据_.NET MVC 页面表格绘制
  2. C++:VS2019遇到C1083 无法打开包括文件: “opencv2/opencv.hpp”: No such file or directory
  3. OpenVINO Inference Engine之GetAvailableDevices
  4. 【Transformer】TransGAN的鉴别器的理解
  5. jQuery Mobile基础 学习笔记
  6. uni-app开发:tabar组件与顶部导航栏(功能开发篇)
  7. 某狸子订单系统豪华版/商城/前台程序/会员模块/增加分销模块
  8. 2011年计算机一级考试题,2011年计算机一级考试模拟试题及参考答案(1)
  9. 基于特征的对抗迁移学习论文_[论文笔记] 对抗样本不是bugs,而是特征
  10. linux 2.6 添加系统调用,在Fedora 13里编译内核(linux-2.6.36)+添加系统调用