Windows 上 cin>> 与 cin.getline() 混用的问题

Windows上使用cin>>与cin.getline()可能导致输入问题,因为回车键输入了' '两个字符。cin>>遇到' '停止读取,' '留在缓冲区。若随后使用getline(),' '将被读取导致未读取到完整行。反之,cin>>会忽略' '。解决方案包括正确理解和使用输入流的分隔符行为或使用cin.ignore()来处理剩余字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常看到类似下例的问题:

int main()
{
	char buf1[5]={0};
	char buf2[5]={0};
	
	cin >>buf1;
	cin.getline(buf2,5); // 这里似乎不等待输入

	return 0;
}

而解决办法如下:
int main()
{
	char buf1[5]={0};
	char buf2[5]={0};
	
	cin >>buf1;
	cin.ignore(); // 或者 cin.sync(); 之类的
	cin.getline(buf2,5);

	return 0;
}

这是为什么呢?

因为,首先, Windows 上敲一下回车键,实质上是输入两个字符:回车符,紧跟着换行符。这两个字符的 ASCII 码分别为 0x0D 和 0x0A,一般来说,其C++转义表示分别为 '\r' 和 '\n'。然后,cin>> 默认是以一个或多个接连的白空格为间隔,cin.getline 默认则以单个换行符(0x0A)为间隔。回车符和换行符都属于白空格。


这里不讨论为什么 Windows 上敲回车键会输入这两个字符,以及这两个字符

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值