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

如何在do/while循环中正确验证用户输入的AM/PM时段字符串?

问题解决:AM/PM输入验证循环失效的修复

问题根源

你用错了逻辑运算符:||(逻辑或)会导致循环条件永远为真。

  • 输入"AM"时,departure_amOrPM != "am"为真,整个while条件true || false结果为真,循环继续
  • 输入"am"时,departure_amOrPM != "AM"为真,整个while条件false || true结果仍为真,循环继续

要实现「输入不是AM也不是am时继续循环」的逻辑,应该用&&(逻辑与)——只有当两个条件同时成立(既不是AM,也不是am),才继续循环。

修正后的基础代码

do {
    cout << "Please Enter a Valid Period: ";
    cin >> departure_amOrPM;
} while (departure_amOrPM != "AM" && departure_amOrPM != "am");

扩展到支持PM/pm的写法

如果要同时验证AM/am和PM/pm,只需在条件中补充对应判断:

do {
    cout << "Please Enter a Valid Period: ";
    cin >> departure_amOrPM;
} while (departure_amOrPM != "AM" && departure_amOrPM != "am" && 
         departure_amOrPM != "PM" && departure_amOrPM != "pm");

更优雅的写法(统一大小写判断)

可以把输入统一转为小写(或大写)后再判断,减少重复条件:

#include <algorithm>
#include <string>

// ...

do {
    cout << "Please Enter a Valid Period: ";
    cin >> departure_amOrPM;
    // 将输入字符串转为全小写
    std::transform(departure_amOrPM.begin(), departure_amOrPM.end(), departure_amOrPM.begin(),
                   [](unsigned char c){ return std::tolower(c); });
} while (departure_amOrPM != "am" && departure_amOrPM != "pm");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:36:20