字符串与常量if-else语句比较。跳过第二个if / else

时间:2015-03-13 05:41:13

标签: c++ string if-statement compare

我似乎遇到了一个问题。在尝试根据A.M./P.M获取输入时。入口,我的if else语句有一些逻辑错误。我从来没有真正做过这种事情(我对c ++有点新鲜)所以请帮助我们。

cout << "What time was the dose administered? (Round to hour): ";
cin >> time;
cout << "A.M./P.M.? ";
cin >> ap;

cout << ap;

if (ap == "A.M.", "am"){
    ap = "A.M.";
}
else if (ap == "P.M.", "pm"){
    ap = "P.M.";
}
else { cout << "This is not a valid entry.";
}

“ap”是一个字符串。 无论输入什么,结果都是“A.M。”

旁注:原来,它只会打印“P.M.”但这两个陈述都是“如果”,当我把它改成“if else”时,它开始打印“A.M.”仅

1 个答案:

答案 0 :(得分:1)

此...

ap == "A.M.", "am"
rules of operator precedence下的

...等同于......

"am"

...在布尔上下文中经历标准转换为true(通过非0指针)。

这是因为逗号运算符在其左侧评估子表达式 - 即ap == "A.M." - 并且当该评估的任何副作用被执行时,子表达式的实际值随后被丢弃并且子表达式右边的表达式 - 即"am" - 被评估并使用。

您应该使用:

if (ap == "A.M." || ap == "am")

(C ++标准允许关键字“or”作为||的替代,但是着名的Microsoft编译器在没有额外命令行参数的情况下不支持它,因此在实践中最好避免使用用于便携式代码。)