5, 6, 7
或其他序列时,为什么会返回一个?
#include <stdio.h>
#include <simpio.h>
#include <genlib.h>
/* finds the minimum among three integers using minimal amount of relational operations */
int main()
{
int myNumbers[2];
bool lowest;
printf("Enter the first integer...\t");
myNumbers[0] = GetInteger();
printf("Enter the second integer...\t");
myNumbers[1] = GetInteger();
printf("Enter the third integer...\t");
myNumbers[2] = GetInteger();
if (myNumbers[0] < myNumbers[1] && myNumbers[0] < myNumbers[2])
{
lowest = myNumbers[0];
}
if (myNumbers[0] > myNumbers[1] && myNumbers[1] < myNumbers[2])
{
lowest = myNumbers[1];
}
if (myNumbers[0] > myNumbers[2] && myNumbers[1] > myNumbers[2])
{
lowest = myNumbers[2];
}
printf("\n%d", lowest);
getchar();
return 0;
}
答案 0 :(得分:3)
一些问题:
最低被定义为bool
,它应该是int
以及您如何使用它
myNumbers[2]
是一个大小为2的数组,它只能容纳2个数字。将大小声明更改为3。
答案 1 :(得分:2)
替换
bool lowest;
通过
int lowest;
因为你想在“最低”中存储整数,而不是布尔值。
答案 2 :(得分:1)
lowest
是bool
。不应该是更大的东西吗?
答案 3 :(得分:1)
您的问题的答案是,正如许多其他人指出的那样,您使用最低作为布尔类型,而不是数字类型,例如 int ,这将与您的其他程序保持一致。
bool lowest;
布尔类型,如预期的那样,基本上可以包含两种状态: true 和 false 。由于历史原因(即,主要是因为 C 继承),布尔值已与整数相关联,其中0表示false,任何其他值表示为true。
这就是为什么布尔类型仍然与整数兼容(这是一种说法),当你将它分配给零时,它保持为假。如果为其分配任何其他int值,它将成立。这种情况发生在这样的行中:
lowest = myNumbers[0];
最后,执行时:
printf("\n%d", lowest);
发生逆过程, true 转换为 int (因为您在 printf中指定了%d format string), true 转换为1,这是 bool 类型的默认整数值,其整数值为(int) true
(在您的计划中:(int) lowest
)被问到。
可以想象,超过90%的输入整数值将与零不同,这就是你获得1的原因,无论输入是什么。
答案 4 :(得分:0)
添加到其他人的答案。
你有:
int myNumbers[2];
...
myNumbers[2] = GetInteger();
这是不正确的。 myNumbers
是一个包含2个元素的数组,有效的数组索引是0
和1
。由于您希望在数组中存储3
个元素,请将其大小更改为3
。
答案 5 :(得分:0)
警告:你的阵列不够大。声明数组时,索引不是数组的最大索引,而是元素数,即最大索引+ 1.
答案 6 :(得分:0)
您可以使用 Ternary Operator ( ? :) 使用最小关系运营商数量(正如您所说)来查找最低号码或最高b / w三个号码。
int low, lowest;
low = (number[0] < number[1]) ? number[0] : number[1];
lowest =(low < number[2]) ? low : number[2];
printf("%d",lowest);
答案 7 :(得分:0)
其他人指出了程序中明显的缺陷(即数组大小,结果的数据类型)。 这里有一点可以让你理解数组的索引,特别是w hy they start from zero?
PS:我喜欢评价最高的答案,但我建议你阅读整篇文章。
答案 8 :(得分:0)
这个问题已经回答了,所以我将发布一个更简单的解决方案:
int lowest = myNumbers[0];
if (myNumbers[1] < lowest)
{
lowest = myNumbers[1];
}
if (myNumbers[2] < lowest)
{
lowest = myNumbers[2];
}
printf("lowest value is: %d\n", lowest);
你只需要很多条件!