菜单调用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
相关产品推荐
相关产品推荐

