C++中的cin结束后使用cin.getline()不能输入的问题
c++ pp page68
https://blog.csdn.net/leowinbow/article/details/82190631
cin 后使用 cin.getline():
当cin结束后,将回车键生成的换行符留在了输入队列中(cin 不丢弃空白符 p68,534),后面的cin.getline()看到了该换行符后,认为是一个空行,并将空字符串赋值给相应变量。
cin 后使用 cin:
并不会出现这种情况,因为cin的时候,虽然cin根据空格、制表符以及换行符来确定输入结束,但开始输入之前它们跳过空白(空格、换行符和制表符),直到遇到非空白字符(p612),所以cin>>在等待键盘敲入时,你哪怕先敲回车符,cin>>语句也不会执行结束。
ps:
c++ pp page65
getline()和get()都可以读取一行的输入,直到达到换行符;随后,getline()将丢弃换行符,即将换行符从输入队列中删除,而get()将换行符保留在输入队列中。例子见P138.
------------------------------------分割线---------------------------------------------------
注意,无参数的cin.get()读取下一个字符。
------------------------------------分割线2022/2/22--------------------------------------
关于cin根据空格、制表符以及换行符来确定输入结束(c++ pp page65):
若有语句:
int a; cin>>a;
当输入:
1 2 3 4 5 [Enter]
时,显然a的值为1;
因为cin使用空格、制表符和换行符来确定输入结束,而读取到1后遇到了空格,所以输入结束。但是此时,剩余的输入
2 3 4 5 [Enter]
仍然在输入队列中(注意2之前有一个空格,因为cin不丢弃换行符、空格、制表符?),并没有被丢弃。
所以若将输入语句放入循环中:
while(cin>>value){ ++count; sum+=value; }
此时输入:
1 2 3 4 5 [Enter]
6 7 8 9 10 [Enter]
11[Ctrl+Z]
那么count的值为11;
因为cin语句处于循环中时,若没有遇到EOF(Ctrl+Z),输入类型不匹配等错误,就会一直输入(当遇到空格时,开始输入之前它们跳过空白(空格、换行符和制表符),直到遇到非空白字符(p612),所以继续输入);因为cin>>value实际上是cin的一个方法函数调用,该函数返回cin。如果cin位于测试条件中(如while循环的判定中),则将被转换为bool类型,如果输入成功,转换后的值为true,否则为false。(参考C++ pp page 155 163)
------------------------------2022/2/24--------------------------
注意,将cout,cin看作输入输出缓冲区(输入输出流),而不要看作一定为手动收入,输出到屏幕
考虑如下代码:
int main() { char ch; cin>>ch; while(ch != 'q') { cout<<ch<<endl; cin>>ch; } }
若输入为
abcd[Enter]
输出为?
解释:当输入为 abcd[Enter] 时,输入缓冲区内就有了 abcd[Enter] ,字符'a'先存储进ch,缓冲区内还剩下 bcd[Enter] ,进入while循环,’a‘ != 'q',所以输出字符'a',然后执行 cin>>ch; 注意,这里因为输入缓冲区内仍有内容,所以不是手动输入,而是缓冲区内的下一个字符自动存储进ch内;同理剩下三个字符的也是如此。
考虑输入为
ab cd[Enter]
输出为?
因为cin不允许输入为空,所以遇到空格时,再继续将缓冲区下一个字符送进ch内。
-----------------------------------2022/4/3----------------------------------
判断 get(char *, int) 是否读取到了空行:
c++11中,get(char *, int)在读取到了空行后返回false;
较早的版本中,get(char * ,int)在读取到了空行之后,返回值不为false;但,如果读取到了一个空行,则字符串中的第一个字符是控制符 '\0';
因此判断 get(char *, int) 是否读取到了空行:
char temp[50]; cin.get(temp,50); if(!cin || temp[0] == '\0') break;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!