• 关于c++中关于cin的总结整理


     

    一、导论

    二、cin的工作原理

    三、cin的使用语句

    四、关于cin的输出规则

    一、导论

    cinc++中比较常用的输入方法,不过cin有很多的种类,且在其使用方面略有差异,比如说cin,cin.get,cin.getline等诸多规则,所以今天我们就来讨论一下cin这个语句。

    二、cin的工作原理

    cin的工作原理为:当执行cin时候,键盘的输入会存入缓冲区,之后cin会根据相应的参数(比如说我们要求cin只读取缓冲区中的一位,那么我们就读取它的一位)把缓冲区的值读取出来,留给接下来的程序使用。

    三、cin的几种使用语句

    目前来说cin的使用语句主要有以下几种:cin>>,cin.get()cin.getline()。先说一下cin>>,他是cin中比较常见的输入模式,多个输入时按照回车作为分隔符,但是回车本身不作为输入部分。

    cin.get(),他有多种工作模式,比较常用的有这几种,第一种是int 参数 = cin.get(),第二种是cin.get(b),第三种是cin.get(array,位数)(当然前提是不能出现数组越界),三种方法都可以输入字符,前两者是用来输入单个字符,最后的那个可以按照位数来获取字符,但是cin.get有个问题,就是说他可以识别回车,以如下程序为例:

        char a;

        char b;

        std::cout<<"please input a,b"<<std::endl;

        a = std::cin.get();

        std::cin.get(b);

        std::cout<<"a is:"<<a<<std::endl;

        std::cout<<"b is:"<<(int)b<<std::endl;

    如果我们输入2+Enter,那么此时输入的是210(10的原因在于EnterASIC码中是10)

    cin.getline(),他是c++当中的一种特有函数,它的使用方法与cin.get基本相同,不过他和get的不同之处在于getline是不识别回车的,get识别回车,另外来说getlineget更能做的一点在于他可以控制缓冲区的数据是否全部取出。我们以如下程序为例,

    1 char array[20];

        2 char b;

        3 std::cout<<"please input a,b"<<std::endl;

        4 std::cin.getline(array, 5);

        5 std::cin.clear();

        6 std::cin.get(b);

        7 std::cout<<"array is"<<array<<std::endl<<"b is"<<b<<std::endl;

    我们首先把第5行注释掉,然后我们输入12345,然后我们执行,那么我们此时执行出来的结果是什么呢?Array=1234,而b=NULL

    之后我们把第5行恢复,接着我们同样输入12345,那么我们此时执行出现的结果是什么呢?Array=1234,而b=5。那么为什么会出现这样的情况呢?当然两者的差别在于第5行,这句话的作用就在于把缓冲区的数据全部都拿出来了,接着我们解释一下上述两者现象,首先注释掉第五行的现象:当我们输入12345后,该数据全部送到缓冲区,接着我们执行第一个cin语句,此时array=1234,此时缓冲区中还有5这个数字,接着我们继续执行第二个cin,此时他读不到数据(因为我感觉cin是一次取出的,不回去缓冲区取第二次,目前我只能这么解释),那么此时输出的结果为NULL。好的,接着我们解释第二个现象,该数据全部送到缓冲区,接着我们执行第一个cin语句,此时array=1234,由于此时有clear函数,那么此时12345全部取出,接着我们继续执行第二个cin,此时他可以读取到数据5,那么此时输出的结果为NULL

    接着我们说一cin.ignore语句,这么语句的目标是可以忽略cin中的一些输入,举个例子:

    1 char str1[20];

        2 char str2[20] {NULL};

        3 std::cout<<"please input a,b"<<std::endl;

        4 std::cin.getline(str1, 5);

        5 std::cin.clear();

        6 std::cin.ignore(5);

        7 std::cin.getline(str2, 5);

        8 std::cout<<"str1 is"<<str1<<std::endl;

    9 std::cout<<"str2 is"<<str2<<std::endl;

     

    首先我们把第六行注释掉,此时我们输入1234567890abcd,那么此时的结果是什么呢?Str1=1234,str2=5678。但是如果我们把第六行恢复,此时我们输入1234567890abcd,那么此时的结果是什么呢?Str1=1234,str2=0abc,这是因为中间的ignore函数自动忽略了5个字符,才导致了这个现象。

     

    今天主要聊了一下cin的工作原理和相关模式,希望这篇博客对大家有帮助

     

  • 相关阅读:
    数据结构01-线性表
    java-04流程控制语句
    从0开始的Python学习002python的数据类型
    从0开始的Python学习001快速上手手册
    MySQl ifnull()和substr()
    parent.fraInterface.xxxxxx
    身份证的校验规则
    onclick="return function()"的使用情况
    jsp include 报错:illegal to have multiple occurrences of contentType with different values (old: text/html; charset=UTF-8, new: text/html; carset=UTF-8)
    Oracle数据库忘记用户名密码的解决方案
  • 原文地址:https://www.cnblogs.com/songyuchen/p/13829807.html
Copyright © 2020-2023  润新知