我正在尝试使用条件语句在一个条件中执行一个操作,但如果另一个条件适用则执行两个操作。
请考虑以下事项:
( h >= 0 && h < 24 ? hour = h : hour = 0, cout << "Invalid Hour Detected\n")
如果“h”设置为25,则将“小时”设置为0。 如果“h”设置为12,则将“小时”正确设置为12。
问题在于它输出了“无效小时检测”的真假条件。 如果不满足条件,我只希望输出。
基本上,我想知道在条件语句中是否有可能为一个条件做两件事。
也尝试过:
( h >= 0 && h < 24 ? hour = h : hour = 0 && cout << "Invalid Hour Detected\n")
但是在任何一种情况下都没有运行cout。
答案 0 :(得分:9)
如果确实想要这样做,请添加正确的括号并反转赋值和输出插入的顺序(使用逗号运算符时, left 表达式被丢弃):
( h >= 0 && h < 24 ) ? ( hour = h ) : (std::cout << "Invalid Hour Detected\n", hour = 0);
但是,我的建议是使您的代码可读并放弃这种编码风格。
答案 1 :(得分:4)
我正在尝试使用条件语句在一个条件中执行一个操作,但如果另一个条件适用则执行两个操作。
这不是条件语句,它是条件表达式 + 。从可读性的角度来看,条件语句更合适:
if( h >= 0 && h < 24) {
hour = h;
} else {
hour = 0;
cout << "Invalid Hour Detected\n";
}
<小时/> + C ++遵循C允许使用独立表达式作为语句。这就是为什么你最终可以通过使用括号和切换操作顺序将你的解决方案“塞进”正确的语法。与普通熟悉的
if
相比,该解决方案的可读性受到很大影响。
答案 2 :(得分:0)
尝试
( h >= 0 && h < 24 ? hour = h : (hour = 0 || cout << "Invalid Hour Detected\n"))
或者
( h >= 0 && h < 24 ? hour = h : (hour = 0 & cout << "Invalid Hour Detected\n"))
答案 3 :(得分:0)
逗号运算符的所有运算符的优先级最低。因此,您的表达式的评估如下:
(( h >= 0 && h < 24 ? hour = h : hour = 0), cout << "Invalid Hour Detected\n")
您可以在条件表达式中表达这一点,并使用逗号运算符进行分组和正确使用。但是,如果可能的话,最好在if/else
声明中表达这一点。如果需要在表达式中使用它,请考虑将其放在函数中。
答案 4 :(得分:0)
我知道这可能不是您正在寻找的答案,但如果您稍微重构一下,这将“自然地”清除。
// Handy as a utility free function (in apt namespace)
bool isValidHour(unsigned int hour) {
return hour >= 0 && hour < 24;
}
isValidHour(h) ? hour = h : handleInvalidHour();
//...more
// If this is not in a class then you should pass "hour" as a reference.
void MyClass::handleInvalidHour() {
hour = 0;
cout << "Invalid Hour Detected\n";
}
当然,如果可能的话,你应该使用新的std :: chrono。它很可爱,富有表现力。