C++航空管理系统目的地校验始终返回INVALID DESTINATION错误求助
Bug根因分析
- 核心逻辑错误:目的地校验的遍历逻辑存在缺陷,每次遍历列表元素时都会覆盖
stat状态值。即使前面已经匹配到合法目的地,后续遍历到不匹配元素时会将stat重置为0,最终stat的值仅和列表最后一个元素的匹配结果相关,绝大多数情况下都会是0,触发无效提示。 - 次要体验问题:国际目的地列表输出时未添加换行,用户查看可选目的地不清晰,也可能导致输入匹配失误。
修复方案
修改校验遍历逻辑:匹配到合法目的地后立即跳出循环,避免stat被后续不匹配的元素覆盖,同时每次校验前重置stat初始值为0,避免历史值干扰。
核心代码修改示例
仅需要调整两个case内的校验循环即可:
本地目的地校验修改
// 遍历前重置stat为未匹配状态 stat = 0; for(int i=0;i<4;i++){ if(dest==local_des[i]){ stat=1; // 匹配成功直接跳出循环,无需继续遍历 break; } }
国际目的地校验修改
stat = 0; for(int j=0;j<5;j++){ if(dest==inter_des[j]){ stat=1; break; } }
完整修复后代码参考
string dest; string local_des[4]={"HYDERABAD","KOLKATA","GWALIOR","DELHI"}; string inter_des[5]={"USA","PARIS","DUBAI","LAS VEGAS","LONDON"}; char option; int stat,a,b; cout<<"\nPlease select your destination type:\n"; cout<<"1.Local Destinations\n"; cout<<"2.International Destinations\n"; cout<<"\nENTER YOUR CHOICE(1 or 2)\n"; cin>>option; switch(option){ case '1': for(a=0;a<4;a++){ cout<<"\n"<<local_des[a]; } cout<<"\nNow Enter Your Destination(IN BLOCK LETTERS):"; cin.ignore(); getline(cin,dest); // 修复后的校验逻辑 stat=0; for(int i=0;i<4;i++){ if(dest==local_des[i]){ stat=1; break; } } if(stat==1){ cout<<"DESTINATION CONFIRMED!\n"; } else{ cout<<"INVALID DESTINATION\n"; } break; case '2': for(b=0;b<5;b++){ cout<<"\n"<<inter_des[b]; } cout<<"\nNow Enter Your Destination(IN BLOCK LETTERS):"; cin.ignore(); getline(cin,dest); // 修复后的校验逻辑 stat=0; for(int j=0;j<5;j++){ if(dest==inter_des[j]){ stat=1; break; } } if(stat==1){ cout<<"DESTINATION CONFIRMED!\n"; } else{ cout<<"INVALID DESTINATION\n"; } break; default: cout<<"INVALID OPTION"; }
内容的提问来源于stack exchange,提问作者Tejasri
相关产品推荐
相关产品推荐

