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

C++使用getline输入字符串数组时非首元素首字符被忽略问题

问题原因

你的猜想完全正确,首字母丢失问题完全是循环内多余的cin.ignore()调用导致的。

  • 使用cin >>读取数值类内容(比如你代码里的numToppings)时,输入结束后用户按下的换行符\n会残留在输入缓冲区中。此时第一次调用cin.ignore()是合理的,作用是跳过这个残留换行,避免后续第一个getline直接读取到空内容。
  • 但getline本身的特性是:读取到换行符后会自动将该换行符从输入缓冲区中移除,下一次读取的起始位置就是下一行内容的第一个字符。你在循环内每次调用getline前都执行了cin.ignore(),就会把每行配料名称的第一个字符直接丢弃,完全对应你遇到的olives输出为lives、cheese输出为heese的现象。

修复方案

直接删除循环内部的cin.ignore()调用即可,修复后代码如下:

cin.ignore();
getline(cin, name);
petes.setCustomerName(name);

for (int i = 0; i < numToppings; i++)
{
    getline(cin, toppingNames[i]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:39:03