这是问题: 编写具有五个参数的函数 minMax 的定义。前三个参数是整数。最后两个由函数设置为前三个参数值中的最大值和最小值。该函数不返回值。
函数可以按如下方式使用:
int a = 31, b = 5, c = 19, big, small;
minMax(a, b, c, &big, &small); /* big is now 31; small is now 5 */
这是我的代码:
void minMax(int x, int y, int z, int* big, int* small)
{
if (x < y && x < z)
*small = x;
else if (y < x && y < z)
*small = y;
else if (z < x && z < y)
*small = z;
if (x > y && x > z)
*big = x;
else if (y > x && y > z)
*big = y;
else if (z > x && z > y)
*big = z;
}
这是我遇到的错误:
您的函数没有更改small
的值。确保在函数中取消引用它。
不确定哪里出了问题?
谢谢。
最佳答案
我看到一个紧迫问题。
当你传递数字1
时,你认为会发生什么? , 1
和 7
?
也许您可能需要考虑使用 <=
和 >=
而不仅仅是 <
和 >
.
由于该错误消息看起来与我之前看到的任何编译器错误都不一样(并且代码在语法上是有效的),我建议该消息来自测试工具,它可能:
- 设置
big/small
值转换为传入的数字以外的数字(例如-9999
)。 - 使用测试数据调用函数(例如,
1,1,7
)。 - 检查输出变量以确保它们已更改为正确的值。
此外,它不是世界上最可读 的代码(无意冒犯)。如果您能够以一种一目了然的方式构建您的代码(包括适当的评论),您将有成群结队的 future 程序员赞美您并崇拜您的名字:-)
像这样的东西比很多那些 else if
更清楚地表明了意图(IMNSHO)构造:
// Populate big/small based on max/min of x, y and z.
void minMax (int x, int y, int z, int *big, int *small) {
// Set by default to x, only change if others are bigger.
*big = x;
if (y > *big) *big = y;
if (z > *big) *big = z;
// Same for small but with reversed comparisons.
*small = x;
if (y < *small) *small = y;
if (z < *small) *small = z;
}
关于c++ - 指针、C++...代码不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831533/