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

C++程序输入学习项目后无限返回选项菜单问题排查求助

输入学习项目后程序无限循环菜单的问题解决

问题根源

你遇到的无限循环确实是输入缓冲区残留换行符导致的,具体问题出在这段代码逻辑里:

cout << "Please enter your term of study e.g. 2020/24: ";
cin >> data;
outfile << data << "\t";

cout << "Please enter the Programme of study you are in: ";
getline(cin, programme, '\n');
cin.ignore();
  • 用cin >> data读取学期信息时,输入完成按回车,这个换行符会留在输入缓冲区中
  • 后续的getline会直接读取这个残留的换行符,导致programme被设为空字符串,相当于直接跳过了学习项目的输入步骤
  • 更糟的是你把cin.ignore()放在了getline之后,这会吃掉下一个输入的字符,引发后续cin >> level的读取异常,最终导致程序逻辑混乱,菜单开始无限输出

修复方案

把cin.ignore()移到getline之前,同时去掉getline里多余的'\n'(getline默认就是以换行符为结束标志):

cout << "Please enter your term of study e.g. 2020/24: ";
cin >> data;
outfile << data << "\t";

// 先清除缓冲区里残留的换行符
cin.ignore(numeric_limits<streamsize>::max(), '\n');

cout << "Please enter the Programme of study you are in: ";
getline(cin, programme); // 不需要额外指定'\n'
outfile << programme << "\t";

注:使用numeric_limits需要包含头文件<limits>,如果不想添加该头文件,也可以用cin.ignore(1000, '\n'),用足够大的数字覆盖可能的残留字符

额外代码隐患提示

你代码里还有一个容易触发崩溃的问题:

int len = data.length();
while (len < 30) {
    data[len] = ' ';
    len = len + 1;
}

直接通过data[len]赋值会导致字符串越界,因为string的长度不会自动扩展。应该改成用append方法填充空格:

int len = data.length();
if (len < 30) {
    data.append(30 - len, ' ');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:15:41