zoukankan      html  css  js  c++  java
  • C++ cin输入流详解

    标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog 4个流对象(详情请查看:与C++输入输出有关的类和对象),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的真值,判断流对象是否处于正常状态。
    1. #include <iostream>
    2. using namespace std;
    3. int main( )
    4. {
    5. float grade;
    6. cout<<"enter grade:";
    7. while(cin>>grade)//能从cin流读取数据
    8. {
    9. if(grade>=85) cout<<grade<<"GOOD!"<<endl;
    10. if(grade<60) cout<<grade<<"fail!"<<endl;
    11. cout<<"enter grade:";
    12. }
    13. cout<<"The end."<<endl;
    14. return 0;
    15. }
    流提取符“>>”不断地从流中提取数据(每次提取一个浮点数),如果成功,就陚给 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."。
  • 相关阅读:
    《架构之美》读后感(一)
    《架构即未来》读后感(三)
    《架构即未来》读后感(二)
    《架构即未来》读后感(一)
    《架构漫谈》读后感(三)
    《架构漫谈》读后感(二)
    SOA
    软件杯-视频全量目标分析和建模需求分析说明
    阅读笔记一线架构师实践指南03
    阅读笔记一线架构师实践指南02
  • 原文地址:https://www.cnblogs.com/shawnchou/p/10934371.html
Copyright © 2011-2022 走看看