cin 文本输入

cin的读取字符规则

cin遇到回车、空格、tab键 结束,但是缓冲区还存在这三个字符,并没有将这三个字符丢弃,且指针光标在这三个字符之前,也就是说,下一次通过其他输入函数读取时,是可以读到这三个字符的。

cin.get 的读取字符规则:

  1. 读取字符

    以回车键结束,并且会将回车键作为一个字符读入,读完回车键之后,指针光标移到回车键后面,如果后面还有输入的话,会读取下一字符。故下图不会像后面读取字符串一样介绍的不跳过回车键
    在这里插入图片描述
    如下所示,使用cin.ignore将回车符丢弃,程序便能够正常运行。
    在这里插入图片描述
    读取字符串

以回车键结束,读取到前面残留的回车会直接结束,并且指针光标不会跳过回车键,当输入3【回车】之后,再次使用cin.get,然后想输入4【回车】是读取不到该输入值的。

但是你不用输入,程序会直接结束,因为前一个输入的回车并没有舍弃,而是在缓冲区,这时读取到的是缓冲区的回车而直接结束。
以下是不使用cin.ignore丢弃缓冲区的字符的结果:
在这里插入图片描述
指针光标不跳过回车键:注释掉cin.ignore之后,可以看到程序只输入5【回车】,就直接结束了,而且输入了5个空串,后面的输入语句看似没有执行,其实执行了,读取的是缓冲区中遗留下的回车键,并且cin.get函数遇到回车不会将指针光标移到回车后,故造成了读到的一直是回车,所以结束

cin.getline和cin.get函数类似,所不同的是,cin.getline遇到回车会将指针光标后移,具体看后面cin.getline的贴图。

(cin.ignore的作用默认是丢弃缓冲区的一个字符)。

我们可以看到cin>>len之后,回车了,而且后面也有cin.get要求输入,但是程序却直接自动执行结束,说明读取字符串时,指针光标不会跳过回车键,除非人为添加cin.ignore()或者getchar()读走回车键,程序才能正常运行.

如下所示,使用cin.ignore将回车符丢弃,程序便能够正常运行。
在这里插入图片描述
cin.getline 的读取字符规则:
读取字符串:回车键结束

当读到回车键的时候,此次读取结束,会将指针光标移到回车键之后,从而下一次读取的是回车键之后的字符。
在这里插入图片描述
当我们输入2【回车】后,使用cin.ignore丢弃了回车符,所以再输入12【回车】时,直接读取12,指针光标移到回车之后,而第二次读取时,读取的是我们输入的23,而不是12的回车键

如果我们注释掉第一个cin.ignore之后,可以看到,我们输入2【回车】后,len读取了2,然后cin.getline遇到前面缓冲区留下的回车键结束此次读取操作,并将指针光标移动至回车之后,然后执行下一次读取操作,我们输入23,可以看到第二次读取到了23这个字符串。
在这里插入图片描述

总结

  1. cin
    ① cin>> 右面是一个字符时,从缓冲区读取一个非空白字符的字符后停止读取。
    ② cin>> 右面是一个字符串时,从缓冲区读取数据,若第一个字符为空白字符,则忽略并丢弃,读取下一个字符,直到遇到空白字符时停止读取,此空白符留在缓冲区。

  2. cin.get()
    ① 无参数时,读入一个字符,包括换行符,常用来处理输入缓冲区中的换行符。
    ② 接受一个参数时,格式为 cin.get(char ch);,读入一个字符后结束读取。
    ③ 接受两个参数时,格式为 cin.get(array_name, ArSize);,从缓冲区读取数据,达到行尾或者读取了 ArSize - 1 个字符为止,且超过规定的字符数不会出现错误,会直接截断,cin.get() 不对此换行符进行处理,并将其留在缓冲区。

  3. cin.getline()
    接受两个参数,格式为 cin.getline(array_name, ArSize);,函数从缓冲区读取数据,达到行尾或者读取了 ArSize - 1 个字符为止,且超过所规定的字符数会出现错误,cin.getline() 读取换行符后将其替换为空字符,并丢弃。

  4. getline()
    声明在头文件中
    接受两个参数,格式为 getline(cin, string_name);,从缓冲区读取数据,遇到换行符时结束读取,且 getline() 读取此换行符后将其替换为空字符,并丢弃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LovG-Sco-Tec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值