cin 文本输入

cin 文本输入

cin的读取字符规则:

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

cin.get 的读取字符规则:

读取字符:

以回车键结束,并且会将回车键作为一个字符读入,读完回车键之后,指针光标移到回车键后面,如果后面还有输入的话,会读取下一字符。故下图不会像后面读取字符串一样介绍的不跳过回车键

如下所示,使用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这个字符串。

总结

cin

① cin>> 右面是一个字符时,从缓冲区读取一个非空白字符的字符后停止读取。

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

cin.get()

① 无参数时,读入一个字符,包括换行符,常用来处理输入缓冲区中的换行符。

② 接受一个参数时,格式为 cin.get(char ch);,读入一个字符后结束读取。

③ 接受两个参数时,格式为 cin.get(array_name, ArSize);,从缓冲区读取数据,达到行尾或者读取了 ArSize - 1 个字符为止,且超过规定的字符数不会出现错误,会直接截断,cin.get() 不对此换行符进行处理,并将其留在缓冲区。

cin.getline()

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

getline()

声明在头文件中

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

相关推荐

男人应该壮阳还是滋阴?你可能做错了很多年!
365bet网球比赛比分

男人应该壮阳还是滋阴?你可能做错了很多年!

📅 07-02 👁️ 9617
1韩元等于多少人民币?
365sport365

1韩元等于多少人民币?

📅 07-08 👁️ 9488
骚扰电话拦截软件有哪些?几款骚扰电话拦截app推荐
365bet网球比赛比分

骚扰电话拦截软件有哪些?几款骚扰电话拦截app推荐

📅 07-09 👁️ 6079
你凭什么上北大
365bet网球比赛比分

你凭什么上北大

📅 07-13 👁️ 1023
揭秘清茗小龟CD多久,深度解析养龟爱好者必知技巧!
日亚礼品卡怎么用?日亚付款怎么用礼品卡?
365bet网球比赛比分

日亚礼品卡怎么用?日亚付款怎么用礼品卡?

📅 07-04 👁️ 262
李宁:我丢过金牌,亏过30亿,成就自我只因从不放弃
如何选择适合企业的Offer软件?攻略解析
365bet网球比赛比分

如何选择适合企业的Offer软件?攻略解析

📅 06-29 👁️ 6408
曼联26岁天才落选法国队!5场进3球+2助攻没打动德尚,他伤太多了