You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何cin.ignore(0,'\n')有效而cin.ignore(100,'\n')无效?

为什么cin.ignore(0,'\n')正常运行,cin.ignore(100,'\n')却不行?

哈哈,这个问题核心是对cin.ignore的参数逻辑理解有偏差,我来给你拆解清楚~

首先得明确cin.ignore(n, delim)的本质:它会从输入流里提取并丢弃字符,直到满足两个条件之一:要么已经丢弃了n个字符,要么遇到了终止字符delim(连delim本身也会被一并丢弃)。

1. cin.ignore(0, '\n')的行为

当第一个参数传0时,根据C++标准,这个函数会直接返回,不会丢弃任何字符——相当于你命令它“最多丢0个字符”,那它干脆啥也不做。

回到你的代码:程序启动后输入流是空的,这个ignore调用等于没执行。接下来的cin.getline(arr, 100)会正常读取你输入的第一行(直到换行符,并且自动丢弃换行符),然后cin.getline(brr, 100)读取第二行,完全符合你的预期,所以程序运行正常。

2. cin.ignore(100, '\n')的问题

这个调用的意思是:“最多丢弃100个字符,碰到换行符就停止(连换行符一起丢)”。

问题出在程序刚启动时输入流是空的——这时候ignore会阻塞等待你输入内容。当你输入第一行比如"hello"并按下回车,整行内容"hello\n"都会被ignore直接丢掉!

接下来的cin.getline(arr, 100)会读取你输入的第二行,而cin.getline(brr, 100)还要等你输入第三行。这完全偏离了你原本让arr存第一行、brr存第二行的预期,所以你会觉得程序“无法正常运行”。

额外补充:什么时候该用cin.ignore(100, '\n')?

这个用法一般是在使用cin >>读取数据之后——因为cin >>会停在第一个空白符(比如空格、换行),把换行符留在输入流里,这时候用cin.ignore(100, '\n')可以清空残留的换行符,避免后续的getline读取到空行。但你的代码里没有前置的cin >>操作,输入流一开始是空的,这个ignore反而帮了倒忙。

内容的提问来源于stack exchange,提问作者SGoodman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:04:12