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

一、导论

二、cin的工作原理

三、cin的使用语句

四、关于cin的输出规则

一、导论

cin是c++中比较常用的输入方法,不过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"<

a = std::cin.get();

std::cin.get(b);

std::cout<<"a is:"<

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

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

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

1 char array[20];

2 char b;

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

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

5 std::cin.clear();

6 std::cin.get(b);

7 std::cout<<"array is"<

我们首先把第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"<

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"<

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

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

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

友情链接:
Copyright © 2022 86年世界杯_世界杯预选赛阿根廷 - fjyfzz.com All Rights Reserved.