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.
Mira, no estoy muy avanzado en C, pero para hacer lo segundo podés hacer esto.
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:
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: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:
#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;
}
#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! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
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));
(http://i43.tinypic.com/2i94hh1.png)
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.
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?
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.