[ Foro de C ]

Ultimo ejercicio de cadenas de texto..!

14-Mar-2010 13:55
Manuel Carvajal
4 Respuestas

"Un programa que prepare espacio para un máximo de 100 nombres (de un máximo de 80 letras cada uno). El usuario deberá ir introduciendo un nombre cada vez, HASTA QUE SE PULSE INTRO SIN TECLEAR NADA, momento en el que dejarán de pedirse más nombres y
se mostrará en pantalla la lista de los nombres que se han introducido hasta entonces."

La parte q esta en mayusculas es q me tiene en dudas.. aqui les pongo la primera parte del codigo, hasta llegar a ese punto..

#include <stdio.h>
#include <string.h>
main()
{
char nombres[100][80], fin[]={""};
int i=0;
do {
printf("Escribe un nombre: ");
gets(nombres[i]);
i++;
}
while(strcmp(nombres[i], fin)==0);

cm podria colocar la condicion de repeticion? o fin podria ser = a q? Gracias de antemano..!


14-Mar-2010 19:24
Daniel Luengo

Buenas, yo he utilizado un "for" para que pida como máximo 100 nombres, y en caso de que no se introduzca nada y se pulse intro uso un "break;" para salir del "for".

te dejo aquí el codigo:

#include <stdio.h>
#include <string.h>

main()
{
     const int T=100;
     char nom[T][80];
     int i;
     int k=0;
     
     for(i=0;i<T;i++)
     {
                     printf("Escribe nombre: ");
                     gets(nom[i]);
                     k++;
                     if(strcmp(nom[i], "")==0)
                     break;
     }
     printf("\n");
     for(i=0;i<k;i++)
     {
                               puts(nom[i]);
     }
     printf("\n");
}


15-Mar-2010 22:25
Manuel Carvajal

Muy bien, gracias.. Pero, sabes porque mi "do while" no funciono? Me gustaría saber eso..


15-Mar-2010 22:44
Daniel Luengo

Pues creo que tiene 2 errores:

Al acabar de leer nombres[i], aumentas el valor de "i" en uno (i++), por lo que al comparar nombres[i] con "fin" no estas comparando el nombres que has introducido.

Y en la comparacion que haces en el do while,  pones que se siga haciendo el bucle mientras nombres[i] y "fin" sean iguales. Tendrías que poner "!=", para que cuando no sean iguales pare de hacer el bucle.

Si corriges esas dos cosas me imagino que funcionará.


16-Mar-2010 01:10
Manuel Carvajal

Excelente! No me había dado cuenta de esos errores..! Quizás no pensé lo suficiente.. o estaba pensando demasiado jeje..! Al final lo he terminado haciendo de esta manera:

#include <stdio.h>
#include <string.h>
main()
{
char nombres[100][80], fin[]={""};
int i=0;
do {
printf("Escribe un nombre: ");
gets(nombres[i]);
i++;
}
while(strcmp(nombres[i-1], fin)!=0);
for (i=0;i<=99;i++)
if (strcmp(nombres[i], fin)!=0) puts(nombres[i]);
else break;
}






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)