for(int i=0;i<n;i++)
{
printf("Ingrese datos del predio[%i]\n",i);
puts("Ingrese direccion");
scanf("%s",&(pun+i)->direccion);
puts("Ingrese numero de telefono");
scanf("%i",&(pun+i)->telefono);
puts("Ingrese avaluo");
scanf("%i",&(pun+i)->avaluo);
}
for(int j=0;j<n;j++)
{
printf("Predio [%i]\nDireccion:\t%s\nTelefono:\t\%i\nAvaluo: \t%i\n",j,(pun+j)->direccion,(pun+j)->telefono,(pun+j)->avaluo);
}
for(int k=0;k<n;k++)
{
if ((pun+k)->avaluo>max)
{
max=(pun+k)->avaluo;
printf("El mayor avaluo es:\nDireccion:\t%s\nTelefono:\t\%i\nAvaluo: \t%i\n",(pun+k)->direccion,(pun+k)->telefono,max);
}
if ((pun+k)->avaluo<min)
{
min=(pun+k)->avaluo;
printf("El menor avaluo es:\nDireccion:\t%s\nTelefono:\t\%i\nAvaluo: \t%i\n",(pun+k)->direccion,(pun+k)->telefono,min);
}
}
这是我的代码的一部分,我必须打印最小和最大的“avaluo”,但是当我执行此代码时,它会显示第一个值和最大值,但不是最小值。 我不知道为什么它没有执行“价值
答案 0 :(得分:1)
问题在于min
的初始化。
更改
int min = 0;
到
#include <limits.h>
int min = INT_MAX; // or (pun)->avaluo;
我们还想将max
初始化为小数字,因此
int max = INT_MIN;
建议。
我们希望将max
初始化为一个较大的值(理论上让我们说-infinity),这样当我们与第一个实际值进行比较时,value > max
的比较总是成立,因为如果在应该找到最大值的for循环,我们只检查一个值,这个值应该是最大的而不是-infinity。
min
相同,但+无穷大。来自limits.h的INT_MAX
可以扮演这个角色(INT_MIN
代表-infinity。检查此示例:
int min = 1000;
int max = -1000;
int array[3], i;
array[0] = 10; // instead of getting input from user
array[1] = 20;
array[2] = 30;
for(i = 0; i < 3; ++i) {
if(array[i] < min) {
min = array[i];
}
if(array[i] > max) {
max = array[i];
}
}
// min and max are updated
printf("min = %d and max = %d", min, max);
如果您在一张纸上运行此示例,您将看到这个想法是如何工作的。然后你应该能够理解为什么我们可以使用第一个值而不是无穷大(这里,在这个例子中,无穷大应该是1000)。
正如Chux所说:
变化:
scanf("%i"...);
到
scanf("%d"...);
避免扫描八进制数。