[ Foro de C ]

ejercicio 5.4.2

21-Jun-2013 17:45
Jose Manuel Illanes Juan
1 Respuestas

Buenos dias, en este caso tengo un problema con el ejercicio 5.4.2. que en concreto dice:

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.

Yo he escrito el siguiente código:


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

main()
{

	char nombres[100][80];
	int i=0, comparacion=0;
	
	printf("Introduce hasta un máximo de 100 nombres.Para acabar"
	" de introducir nombres pulsa intro sin teclear nada\n");
	
	do
	{
	for(i=0;i<100;i++)
	{
	gets(nombres[i]);
	if(strcmp(nombres[i],"")==0)
	comparacion=1;	
	}
	}
	while (comparacion!=1);	
	for(i=0;i<100;i++)
	{
	if (strcmp(nombres[i],"")!=0)
	puts(nombres[i]);
	else
	break;
	}
}


El programa no para cuando se pulsa la tecla intro. Quisiera saber porque. si en el while pone que cuando la comparacion sea igual a 1 pare. No encuentro el fallo

Lo he hecho de otra forma y si funciona pero me gustaría saber porque no funciona esta.
Esa forma es la siguiente:


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

main()
{

	char nombres[100][80];
	int i=0, comparacion=0;
	

	printf("Introduce hasta un máximo de 100 nombres.Para acabar"
	" de introducir nombres pulsa intro sin teclear nada\n");
	
	
	for(i=0;i<100,comparacion!=1;i++)
	{
	gets(nombres[i]);
	if(strcmp(nombres[i],"")==0)
	comparacion=1;	
	}
	
	
	for(i=0;i<100;i++)
	{
	if (strcmp(nombres[i],"")!=0)
	puts(nombres[i]);
	else
	break;
	}
}


Otra cosa que me gustaria preguntar es una forma alternativa para conseguir que al escribir la cadena de texto se pare cuando no haya nombre sin usar la orden break que no me gusta nada usarla en los programas.

Muchas gracias de antemano.


21-Jun-2013 23:56
Nacho Cabanes (+84)

Por partes:

- El primer fuente no funciona correctamente, porque el "while" que comprueba el valor de la variable "comparacion" está por fuera del "for", así que no se revisa hasta que no se han introducido los 100 valores.

- El segundo sí funciona correctamente, porque ese "for" con un "operador coma" comprueba dos condiciones distintas. Aun así, esa es una alternativa poco legible, para mi gusto. Yo lo haría con un "while" y olvidará el "for".

- Para evitar el "break", la forma más sencilla es usar un contador para saber cuántos datos se han introducido.






(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.)