使用指针在struct中打印最小和最大值

时间:2015-05-26 18:20:26

标签: c

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”,但是当我执行此代码时,它会显示第一个值和最大值,但不是最小值。 我不知道为什么它没有执行“价值

1 个答案:

答案 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.hINT_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"...);

避免扫描八进制数。