Ver Mensaje Individual
  #21 (permalink)  
Antiguo 20/12/2006, 15:05
Aprendiz-DAO
 
Fecha de Ingreso: diciembre-2006
Mensajes: 13
Antigüedad: 17 años, 4 meses
Puntos: 1
Re: Dos programas que ya me traen loco

Bueno para lo que planteo con los asteriscos es usar la funcion getch de conio.h para que asi no muestre las teclas digitadas, a continuación imprimis el caracter * o cualquier otro como para disfrazar el proceso --"que paresca encriptación tal vez? jej"-- (todo esto en un ciclo for con cada caracter).
Tambien te sugerí algunos cambios en el codigo (detalles menores) que bueno no creo tan necesario explicarlos.
Igualmente te felicito por el codigo esta bastante bueno. (fijate los detalles menores que haya obviado--> todos estamos aca para aprender :) ).

Código:
#include <stdio.h>
#include<conio.h>
#define N 4

int error (char cadena[N])
{
	int i;

	for (i=0; i<N; i++) 
	{	
		//CARACTERES ERRONEOS
		if ((cadena[i]>='0') && (cadena[i]<='9')) // toma un rango de 0 a 9
		{
			printf("La clave es numerica.\n");
			printf("Intentalo otra vez.\n");
			return 1;
		}
	}
	return 0;
}

int desordenados_ (char propuesta[N], char clave[N]) {
	int i, j, desordenados=0;
	for (i=0; i<N; i++)
		for (j=0; j<N; j++)
			if (clave[i]==propuesta[j] && i!=j)
				desordenados++;

			if (desordenados) 
				printf("Hay %d numeros desordenados en la clave.\n", desordenados++);
			//else printf("No hay numeros desordenados en la clave.\n");
			return desordenados;
}

int aciertos_ (char propuesta[N], char clave[N])
{
	int i, aciertos=0;

	for (i=0; i<N; i++)
		if (clave[i]==propuesta[i])
			aciertos++;

		if (aciertos)
			printf("Hay %d aciertos.\n", aciertos);
		else
			printf("No hay aciertos.\n");

		return aciertos;
}

int main() 
{
	char CLAVE[N+1], PROP[N+1], cnulo;
	int  aciertos, desordenados, i;
	
//	do { No hace falta

	printf("Escribe la clave que se ha de adivinar (4 digitos): ");

	for(i=0;i<N;i++)
	{
		//gets(CLAVE);
		CLAVE[i]=getch(); // ya que usas la conio.h
		printf("*");
	}
	CLAVE[i]='\0';

	cnulo=getch();// para corregir el error del
	getc(stdin);// caracter que queda...
		
		
//	}
	if(error(CLAVE));
		printf("\n\n");
	
	while (aciertos!=4) // Si o si hay que acertar? :) 
	{					//Le agregaria un contador para que despues de tantas veces salga
// no hace falta do {
			printf("\nEscribe tu propuesta: ");
			gets(PROP);
//		}
		if (error(PROP));//while
			desordenados=desordenados_(PROP, CLAVE);
		aciertos=aciertos_(PROP, CLAVE);
	}
	
	if (aciertos==N) // si cambias la constante el nro 4 no te sirve...
		printf("\nAcertaste!\n");
	return 0;
}