Pasar a función array de punteros.-

Iniciado por NOB2014, 20 Enero 2014, 02:36 AM

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

NOB2014

Hola.
rir3760 si en algún post no respondo a tus ayudas es porque me lleva tiempo asimilarlas.-
Voy al grano, sigo con mis prácticas de punteros y el programa que estoy haciendo es para que el operador ingrese por ejemplo 8 nombres y luego ordenarlos.-
Hay 2 cosas que no sé hacer, la primera, alguien me podría decir como pasar un array de punteros a función y la segunda, ¿como puedo hacer para que la cantidad de punteros se pida que se ingrese por teclado y no ponerlo a mano?.-

printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");

Aclaro que el programita es para poner algo sino me van a tirar de las orejas.-
Otra cosita, la validación de ingreso de entero la copié de un post de rir3760, ya la adopte como definitiva, funciona a la perfección.-

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

void ingresoCorrecto(int*, int);

int main(void){
char *ptrNombres[] = {"Rosita", "Alberto", "Claudio", "Yanina", "Pedrito", "Jorge", "Daniel", "Leo"};
int indice=0, longitud=0;

longitud = sizeof ptrNombres / sizeof *ptrNombres;

printf("\n");
for(indice=0; indice<longitud; indice++){
printf("[%d] %s - ", indice, ptrNombres[indice]);
}

ingresoCorrecto(&indice,longitud);

printf("\n Su eleccion fue...: %s", ptrNombres[indice]);

return 0;
}

void ingresoCorrecto(int *ingreso, int longitud){
int ch=0, ok=0, temp=0;
do{
printf("\n\n ingrese un entero del [0] al [%d] para extraer un nombre..:", longitud-1);
ok = scanf("%d", &temp) == 1 && temp >= 0 && temp <= longitud-1;
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
*ingreso = temp;
}


Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

jaxoR

Mira, no estoy muy avanzado en C, pero para hacer lo segundo podés hacer esto.

Código (cpp) [Seleccionar]
int MAX_NOMBRES

printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");
scanf("%d", MAX_NOMBRES)

char Nombres[MAX_NOMBRES]


Lo que pasa es que no se me ocurre como hacer para que aparescan solo los nombres que vos ingresaste

Espero haberte ayudado  :silbar:

leosansan

#2
Cita de: NOB2014 en 20 Enero 2014, 02:36 AM
.....................................
alguien me podría decir como pasar un array de punteros a función
........................................

Por ejemplo, si tienes el puntero **A y lo vas a pasa a la función ver_matriz:

Código (cpp) [Seleccionar]
void ver_matriz( int **mat, int fil, int col )


Cita de: NOB2014 en 20 Enero 2014, 02:36 AM
..........................................
y la segunda, ¿como puedo hacer para que la cantidad de punteros se pida que se ingrese por teclado y no ponerlo a mano?.
.........................................

Te pongo dos casos que se me ocurren:

Código (cpp) [Seleccionar]

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

void ingresoCorrecto(int*, int);

int main(void){
 char **ptrNombres;
 int indice=0, longitud=0,ch;
 puts("\n Indique cuantos nombres va a ingresar de 15 caracteres maximo:");
 scanf ("%d",&longitud);
 ptrNombres = malloc( longitud * sizeof *ptrNombres );
 for( indice = 0; indice < longitud; ++indice )
    ptrNombres[indice] = malloc( 15 * sizeof **ptrNombres );
 while ((ch = getchar()) != EOF && ch != '\n');
 for(indice=0; indice<longitud; indice++){
  printf("Nombre [%d]: ", indice+1);
  scanf ("%s",*(ptrNombres+indice));
  while ((ch = getchar()) != EOF && ch != '\n');
 }
 printf("\n");
 for(indice=0; indice<longitud; indice++){
   printf("[%d] %s  ", indice+1, *(ptrNombres+indice));
 }
 ingresoCorrecto(&indice,longitud);
 printf("\n Su eleccion fue...: %s", *(ptrNombres+indice-1));
  for (indice = 0; indice < longitud; indice++)
    free(ptrNombres[indice]);
  free(ptrNombres);
 return 0;
}

void ingresoCorrecto(int *ingreso, int longitud){
 int ch=0, ok=0, temp=0;
 do{
   printf("\n\n ingrese un entero del [1] al [%d] para extraer un nombre..:", longitud);
   ok = scanf("%d", &temp) == 1 && temp > 0 && temp <= longitud;
   while ((ch = getchar()) != EOF && ch != '\n');
 }while(!ok);
 *ingreso = temp;
}


Código (cpp) [Seleccionar]


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

void ingresoCorrecto(int*, int);

int main(void){
char *ptrNombres[15];
int indice=0, longitud=0,ch;
 puts("\n Indique cuantos nombres va a ingresar de 15 caracteres maximo:");
 scanf ("%d",&longitud);
 for ( indice = 0; indice < longitud; indice++)
   ptrNombres[indice] = malloc(sizeof *ptrNombres[indice]);
 while ((ch = getchar()) != EOF && ch != '\n');
for(indice=0; indice<longitud; indice++){
   printf("Nombre [%d]: ", indice+1);
   scanf ("%s",*(ptrNombres+indice));
   while ((ch = getchar()) != EOF && ch != '\n');
}
printf("\n");
for(indice=0; indice<longitud; indice++){
printf("[%d] %s  ", indice+1, *(ptrNombres+indice));
}
ingresoCorrecto(&indice,longitud);
printf("\n Su eleccion fue...: %s", *(ptrNombres+indice-1));
        free(ptrNombres);
return 0;
}

void ingresoCorrecto(int *ingreso, int longitud){
int ch=0, ok=0, temp=0;
do{
printf("\n\n ingrese un entero del [1] al [%d] para extraer un nombre..:", longitud);
ok = scanf("%d", &temp) == 1 && temp > 0 && temp <= longitud;
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
*ingreso = temp;
}


Espero no se me haya ido la olla entre tanto puntero. ;) ;) ;)

¡¡¡¡ Saluditos! ..... !!!!




NOB2014

Hola
Ya casi lo tengo gracias a que pude copiar de los ejemplos de Leo y wiD^.-
Lo que necesitaría son 2 cositas más:
La primera.
char *ptrPalabras[15];
¿Esto me asegura un array de punteros de N punteros y un ancho máximo
de 15 caracteres para cada palabra?.-
La segunda.
printf("\n %s", *(palabras+i));




No me funciona, por favor si lo desean un poco de teoría del porque.-
Leo para vos que dedicas mucho tiempo mostrando códigos, discúlpame si no los tomo completos es que tomando trozos de cada ejemplo me resulta beneficioso pata mi aprendizaje.-

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

amchacon

Tienes que diferenciar entre un error y un warning. Un error aborta la compilación. Un warning es cuando el compilador te avisa de "algo" que puede resultar ambiguo, extraño o que puede causar problemas, pero que puede seguir compilando sin problemas.

¿De que tipo es la variable palabras?
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

NOB2014

Hola
Mil disculpas, creí que había incluido el código en el post y lo borre para hacer otra practica, me quede sin nada.-
Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-