| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
cigoba

Registrado: 27 Ago 2007 Mensajes: 43
| Publicado: 30/11/2007 6:20 am | | | Título: Guardar tres cadenas en un array |
| Hola. Estoy haciendo un codigo en C que me guarda en un array tres cadenas (luego quiero hacerlo para más) introducidas por teclado. El asunto es que no me las guarda, solo guarda la ultima en ingresar y esto lo compruebo imprimiendo el contenido del array donde estan esas cadena por medio de un bucle for. Seguro que estoy implementando mal ese array o deberia ser de otra forma, pero hasta este momento no encontré la solucion. Dejo aqui el codigo para que lo vean:
| Código: | #include <stdio.h> #include <stdlib.h>
int main(void) { char cad[30], *p=NULL, *ap[3]; int i=0, c=1; printf("Cantidad de alumnos: 3\n"); do { printf("Cadena %d: ", c); gets(cad); p=cad; ap[i]=p; i++; c++; } while(c <= 3); puts("\nElementos:"); for(i=0; i<3; i++) printf("%s\n", ap[i]); puts("\n"); system("PAUSE"); return EXIT_SUCCESS; }
|
Gracias de antemano _________________ esta es mi firma. |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3837 Ubicación: Mexico
| Publicado: 30/11/2007 7:32 am | | | Título: |
| Tienes que utilizar un array de tres elementos:
Donde cada uno de los elementos sea a su vez un array de caracteres donde pueda almacenarse una cadena (el nombre del alumno en tu caso) de, por ejemplo, 32 caracteres:
| Código: | #define NUM_ALUMNOS 3 #define LONG_MAX_NOMBRE 32
/* ... */
char nombre[NUM_ALUMNOS][LONG_MAX_NOMBRE]; |
Y para leer cada uno de los nombres no es recomendable utilizar la funcion gets ya que el programa puede reventar dependiendo del numero de caracteres en la entrada estandar.
El programa modificado (C estandar):
| Código: | #include <stdio.h> #include <stdlib.h> #include <string.h>
#define NUM_ALUMNOS 3 #define LONG_MAX_NOMBRE 32
int main(void) { char nombre[NUM_ALUMNOS][LONG_MAX_NOMBRE]; char *nl; int i; puts("Cantidad de alumnos: 3"); for (i = 0; i < NUM_ALUMNOS; i++){ printf("Nombre %d: ", i + 1); fflush(stdout); if (fgets(nombre[i], LONG_MAX_NOMBRE, stdin) == NULL) return EXIT_FAILURE; if ((nl = strchr(nombre[i], '\n')) != NULL) *nl = '\0'; } puts("Alumnos introducidos:"); for (i = 0; i < NUM_ALUMNOS; i++) printf("%d: %s\n", i + 1, nombre[i]); return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | cigoba

Registrado: 27 Ago 2007 Mensajes: 43
| Publicado: 30/11/2007 12:02 pm | | | Título: |
| Gracias rir3760, lo estudiaré detalladamente. _________________ esta es mi firma. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |