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

菜单调用encryption函数异常:无法输入字符串求解决方案

问题分析与解决方案

核心原因

你遇到的问题是输入缓冲区残留的换行符被fgets读取,导致加密函数直接跳过用户输入步骤:
当你在菜单中输入数字(比如1)并按下回车时,cin>>wybor只会读取数字本身,回车产生的换行符\n会留在输入缓冲区里。后续调用fgets时,它会优先读取这个残留的换行符,认为已经获取了一行输入,因此直接执行加密逻辑,输出空的加密结果。

修复方案

这里提供两种可行的修复方式:

方法1:清除输入缓冲区残留的换行符

在menu函数的cin>>wybor之后,加入代码清除缓冲区里的所有字符直到遇到换行符:

#include <limits> // 需要包含这个头文件

int menu(){
    cout<<"Menu\n\n";
    cout<<"Zad.1\nZad.2\n";
    int wybor;
    cin>>wybor;
    // 清除缓冲区到换行符,包括换行符本身
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    return wybor;
}

方法2:统一使用C风格输入避免混合冲突

如果不想混用C++和C的输入函数,可以把菜单里的输入换成fgets,再转成整数:

int menu(){
    cout<<"Menu\n\n";
    cout<<"Zad.1\nZad.2\n";
    char input[10];
    fgets(input, sizeof(input), stdin);
    int wybor = atoi(input);
    return wybor;
}

额外提示

你的代码里还有一个小疏漏:main函数的case 2分支调用的是zad1()而不是zad2(),虽然不影响当前bug,但后续需要实现zad2功能时记得修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:05:21