Instruccion if

Iniciado por BJM, 22 Octubre 2012, 13:58 PM

0 Miembros y 1 Visitante están viendo este tema.

BJM

Este codigo debe buscar el numero mayor de un array de punteros mostrar su valor y posicion, pero en la instruccion IF me da error

#include<stdio.h>
#include<stdlib.h>

int main()
{
  int *array[10];
 
  for(int i=0; i<10; i++)
  {
    printf(" \n Ingrese valor de array[%d]:  ",i); scanf("%d", (array+i));
  }

  int may=0, pos = 0;
  for(int i=0; i<10; i++)
    if (*(array+i) > may)
    {
      may = *(array+i);
      pos = i;
    }
   
for(int i=0; i<10; i++)
  {
    printf(" \n valor posicion array[%d]= %d ", i, *(array+i));
  }
 
  printf(" \n El valor mayor es: %d , en la pos array[i]", may, pos);
  printf("\n\n);
  system("pause");
}


rir3760

El problema principal es: antes de utilizar un puntero debes asignarle una dirección de memoria valida. Como utilizas un array de punteros debes hacerlo por cada uno de sus elementos.

Lo usual es reservar memoria mediante malloc/calloc/realloc, supongo eso ya lo viste en clase. El programa con las correcciones:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int *p[10];
   
   for (int i = 0; i < 10; i++)
      p[i] = malloc(sizeof *p[i]);
   
   for (int i = 0; i < 10; i++){
      printf("Ingrese valor de array[%d]:\n", i);
      scanf("%d", *(p + i));
   }
   
   int may = *p[0];
   int pos = 0;
   for (int i = 1; i < 10; i++)
      if (**(p + i) > may){
         may = **(p + i);
         pos = i;
      }
   
   for (int i = 0; i < 10; i++)
      printf("Valor en array[%d] = %d\n", i, **(p + i));
   printf("El mayor es: %d, en la pos %d\n", may, pos);
   
   for (int i = 0; i < 10; i++)
      free(p[i]);
   
   return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

BJM

Gracias rir3760, copile tu codigo y en la linea 9, me indica error esto es lo que dice:
invalid conversion from `void*' to `int*'

p[i] = malloc(sizeof *p[i]);

En esta linea me indica error, lo copile con dev-c++

rir3760

Cita de: Mari2012 en 22 Octubre 2012, 17:44 PMcopile tu codigo y en la linea 9, me indica error esto es lo que dice:
invalid conversion from `void*' to `int*'

p[i] = malloc(sizeof *p[i]);

En esta linea me indica error, lo copile con dev-c++
Si lo compilas como C no debe generar ningún error.

Si, por alguna extraña razón, lo compilas como C++ se genera el mensaje de error que mencionas.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language