我有一个自定义数据结构 date
在 C++11 中:
struct date {
int day;
int month;
int year;
};
我想比较两个 date
s 并为其编写函数:
int compare_dates(date a, date b) {
int result = 0;
if (a.year < b.year) {
result = -1;
} else if (a.year == b.year) {
if (a.month < b.month) {
result = -1;
} else if (a.month == b.month) {
if (a.day < a.day) {
result = -1;
} else if (a.day > a.day) {
result = 1;
}
} else {
result = 1;
}
} else {
result = 1;
}
return result;
}
但是这个函数不能正常工作。我花了很多时间调试它,并在以下代码部分发现了一些问题:
} else if (a.month == b.month) {
if (a.day < a.day) {
result = -1;
} else if (a.day > a.day) {
result = 1;
}
} else {
result = 1;
}
调试时有两张截图,first在 } else if (a.month == b.month) {
和 second当我在调试器中单击下一行 时。所有输入都会发生这种情况。为什么调试器没有输入 if (a.day < a.day) {
或 result = 1;
每次?
最佳答案
尝试
if (a.day < b.day) {
result = -1;
} else if (a.day > b.day) {
result = 1;
}
代替
if (a.day < a.day) {
result = -1;
} else if (a.day > a.day) {
result = 1;
}
两个测试a.day < a.day
和 a.day > a.day
永远是假的,所以result = -1
和 result = 1
永远不会被执行。
我想编译器优化代码如下
} else if (a.month == b.month) {
} else {
result = 1;
}
关于c++ - 嵌套的 if-else 不适用于自定义结构 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40691952/