为何do-while循环无法终止?输入n/N后循环仍持续运行
问题分析与解决
哦,这个逻辑坑我之前也踩过!你的问题出在do-while循环的条件判断逻辑上,咱们来一步步拆解:
原循环条件是:
while(adminSubChoice!='n' || adminSubChoice !='N');
这个条件永远会返回true,因为一个字符不可能同时等于'n'和'N':
- 当你输入
'n'时,adminSubChoice!='N'是成立的,所以整个||(逻辑或)的结果还是true,循环停不下来; - 当你输入
'N'时,adminSubChoice!='n'是成立的,同样整个条件结果为true,循环继续运行; - 输入其他字符时,两个判断都成立,当然也会继续循环。
修正方案
你需要把逻辑或||改成逻辑与&&,表示当输入既不是'n'也不是'N'的时候,才继续循环:
do{ cout<<"\nEnter Student ID: "; cin>>studentId; cout<<"\nEnter Student Name: "; cin>>studentName; cout<<"\nEnter Student Password: "; cin>>studentPassword; cout<<"\nAdd another account? y/n "; cin>>adminSubChoice; } while(adminSubChoice != 'n' && adminSubChoice != 'N');
更简洁的写法(可选)
你可以用tolower()函数把输入的字符统一转成小写,这样只需要判断一次,代码更清晰:
#include <cctype> // 需要包含这个头文件来使用tolower() do{ // 原有输入代码... cin>>adminSubChoice; } while(tolower(adminSubChoice) != 'n');
这样不管用户输入大写N还是小写n,都会被转成小写,只要不等于'n'就继续循环,逻辑更直观。
内容的提问来源于stack exchange,提问作者user13703720
相关产品推荐
相关产品推荐

