C++连续使用两个cin时空白字符的处理逻辑是什么?
你猜测的读取逻辑完全正确,具体执行流程如下:
cin 的 >> 提取运算符默认采用空白符(空格、制表符、换行符都算)作为输入项的分隔符,执行逻辑如下:
- 每次读取前会自动跳过输入流中所有前置的空白符
- 从第一个非空白符开始读取内容,直到碰到下一个空白符就终止本次读取,把已读取的内容转换成对应变量的类型完成赋值
- 本次终止位置碰到的空白符会残留在输入缓冲区,留给后续读取操作处理
针对你给出的输入样例 Something 20,实际运行流程是:
- 你在控制台输入的所有字符会先存在操作系统的控制台输入缓存里,直到你按下回车键,才会把整行内容推送到程序的标准输入缓冲区供
cin读取 - 第一个
cin >> name跳过缓冲区开头没有的空白符,从首字母开始读取到Something后的空格就停止,将Something赋值给name,空格留在缓冲区中 - 第二个
cin >> age首先跳过缓冲区里残留的空格,接着读取后面的数字20,碰到后续的换行符终止读取,将20赋值给age - 最后
cout会直接拼接输出Something20
关于空格和回车键的作用差异
你提到的“空格和回车键作用类似”要分场景看:
- 对
>>运算符的读取逻辑来说,空格、回车、制表符都是等价的,都会作为输入项的分隔符,终止当前读取操作 - 但只有回车键会触发控制台输入缓存的刷新,你没按回车之前,敲的所有内容(包括空格)都不会被程序接收到,空格本身没有刷新缓冲区的作用
内容的提问来源于stack exchange,提问作者user16861763
相关产品推荐
相关产品推荐

