/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Guardar tres cadenas en un array

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
cigoba



Registrado: 27 Ago 2007
Mensajes: 43

MensajePublicado: 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

MensajePublicado: 30/11/2007 7:32 am
Título:

Tienes que utilizar un array de tres elementos:
Código:
nombre[3]


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

MensajePublicado: 30/11/2007 12:02 pm
Título:

Gracias rir3760, lo estudiaré detalladamente.
_________________
esta es mi firma.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com