Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/11/2010, 17:20
drelsan
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
ayudita con sudoku (incompleto)

Buenaas!
El problema surge cuando en la funcion main es llamada la funcion mostrarcabecera ().
En vez de los numeros, salen simbolos raros.
Han de estar estos archivos para que funcione el programa en la carpeta del proyecto.

puzzles.txt
Código:
puzzle1
puzzle2
puzzle3
puzzle1.txt
Código:
2...578.3
7.....4..
.43......
.7.54....
32.876.49
....13.5.
......61.
..1.....4
4.736...2
puzzle2.txt
Código:
7..42..6.
.435..2..
.1..3.59.
.....4321
....9....
1643.....
.71.6..3.
..9..361.
.2..41..9
puzzle3.txt
Código:
.8..7..9.
..5..2...
2.....4.8
..7..61.5
..2.3.6..
1.82..9..
3.1.....9
...4..7..
.2..9..3.

Código:
#include <stdio.h>
#include <string.h>
#define _CRT_SECURE_NO_DEPRECAT
#define _CRT_SECURE_NO_WARNINGS


typedef struct
{
	int espacios;
	char partida [14];
	char panel [3][3];
} Sudoku;

void mostrarcabecera ()
{
	printf ("***********************\n");
	printf ("*                     *\n");
	printf ("*       SUDOKU        *\n");
	printf ("*                     *\n");
	printf ("***********************\n\n");
}

int menuinicial ()
{
	int opcion;
	printf ("Que desea hacer?\n");
	printf ("1) Empezar a jugar\n");
	printf ("2) Recuperar una partida\n");
    printf ("3) Salir del programa\n");
    
	scanf ("%d", &opcion);
	return opcion;
}

int leerpartida ()
{
	Sudoku x;
	FILE *f;

	f = fopen ("puzzles.txt", "r");
		
	if (f == NULL)
	{
		printf ("Error de apertura del archivo. El programa se cerrara.\n");
		return 0;
	}

	else
	{
		printf ("Las partidas disponibles son:\n");
		
		while (!feof (f))
		{
			fscanf (f, "%s", x.partida);
			printf ("%s\n", x.partida);
		}

		fclose (f);
		return 1;
	}
}

void dibujatablero (Sudoku x)
{
	double porcentaje = (1 - (x.espacios / 81.00)) * 100;

    printf ("Numero de huecos: %d\nPorcentaje de tablero relleno: %.2lf %%\n\n", x.espacios, porcentaje);
	printf ("    | 1 2 3 | 4 5 6 | 7 8 9 |\n");
	printf ("- - + - - - + - - - + - - - +\n");
	printf ("-A- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [0][0], x.panel [0][1], x.panel [0][2], x.panel [0][3], x.panel [0][4], x.panel [0][5], x.panel [0][6], x.panel [0][7], x.panel [0][8]);
	printf ("-B- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [1][0], x.panel [1][1], x.panel [1][2], x.panel [1][3], x.panel [1][4], x.panel [1][5], x.panel [1][6], x.panel [1][7], x.panel [1][8]);
	printf ("-C- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [2][0], x.panel [2][1], x.panel [2][2], x.panel [2][3], x.panel [2][4], x.panel [2][5], x.panel [2][6], x.panel [2][7], x.panel [2][8]);
	printf ("- - + - - - + - - - + - - - +\n");
	printf ("-D- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [3][0], x.panel [3][1], x.panel [3][2], x.panel [3][3], x.panel [3][4], x.panel [3][5], x.panel [3][6], x.panel [3][7], x.panel [3][8]);
	printf ("-E- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [4][0], x.panel [4][1], x.panel [4][2], x.panel [4][3], x.panel [4][4], x.panel [4][5], x.panel [4][6], x.panel [4][7], x.panel [4][8]);
	printf ("-F- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [5][0], x.panel [5][1], x.panel [5][2], x.panel [5][3], x.panel [5][4], x.panel [5][5], x.panel [5][6], x.panel [5][7], x.panel [5][8]);
	printf ("- - + - - - + - - - + - - - +\n");
	printf ("-G- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [6][0], x.panel [6][1], x.panel [6][2], x.panel [6][3], x.panel [6][4], x.panel [6][5], x.panel [6][6], x.panel [6][7], x.panel [6][8]);
	printf ("-H- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [7][0], x.panel [7][1], x.panel [7][2], x.panel [7][3], x.panel [7][4], x.panel [7][5], x.panel [7][6], x.panel [7][7], x.panel [7][8]);
	printf ("-I- + %c %c %c | %c %c %c | %c %c %c +\n", x.panel [8][0], x.panel [8][1], x.panel [8][2], x.panel [8][3], x.panel [8][4], x.panel [8][5], x.panel [8][6], x.panel [8][7], x.panel [8][8]);
	printf ("- - - - - - - - - - - - - - +\n");
}

void main ()
{
	Sudoku x;
	FILE *f;
	int opcion;
	double porcentaje;
	char posicion[3];
	int numero, a, b;
	int fila, columna;
	int retorno;
  
	mostrarcabecera ();

	opcion = menuinicial ();	
	
	while (opcion != 1 && opcion != 2 && opcion != 3)
	{
		printf ("No ha elegido ninguna opcion valida, intentelo de nuevo:\n");
		printf ("Que desea hacer?\n");
		printf ("1) Empezar a jugar\n");
		printf ("2) Recuperar una partida\n");
		printf ("3) Salir del programa\n");
		scanf ("%d", &opcion);
	}

	switch (opcion)
	{
		case 1:
			printf ("Ha elegido empezar a jugar.\n");
		break;
		case 2:
			printf ("Aqui ira el codigo para recuperar una partida.\n");
		return;
		case 3:
			printf ("Ha elegido salir del programa. Adios.\n");
		return;
	}

	do
	{	
		retorno = leerpartida ();
		if (retorno == 0)
		{
			printf ("El fichero no se ha abierto correctamente. El programa se cerrara.\n");
			return;
		}

		printf ("\nEscriba el nombre de la partida que desee comenzar: ");
		scanf ("%s", x.partida);

		strcat (x.partida, ".txt");

		
		f = fopen (x.partida, "r");

	}while (f == NULL);

	printf ("\nLa partida %s va a comenzar...\n\n\n", x.partida);

	
	for (fila = 0, x.espacios = 81; fila < 9 ; fila++)
	{
		for (columna = 0; columna < 9 ; columna++)
		{
			fscanf (f, "\n%c", &x.panel [fila][columna]);

			if (x.panel [fila][columna] != '.')
				x.espacios = x.espacios - 1;

			if (x.panel [fila][columna] == '.')
				x.panel [fila][columna] = 32;
		}
	}

	printf ("A continuacion, comienza el juego...\n");

	dibujatablero (x);

	while (x.espacios >= 1)
	{
		printf ("Introduzca posicion (FilaColumna): ");
		scanf ("\n%c%c", &posicion [0], &posicion [1]);

		a = posicion[0] - 65;
		b = posicion[1] - 49;

		if (posicion [0] == 'S' && posicion [1] == 'A')
		{
			printf ("Ha elegido abandonar el programa. Gracias por jugar, adios.\n");
			return;
		}

		else
		{
			while (a != 0 && a != 1 && a != 2 && a != 3 && a != 4 && a != 5 && a != 6 && a != 7 && a != 8 || b != 0 && b != 1 && b != 2 && b != 3 && b != 4 && b != 5 && b != 6 && b != 7 && b != 82 || x.panel [a][b] != '.')
			{
				if (a != 0 && a != 1 && a != 2 && a != 3 && a != 4 && a != 5 && a != 6 && a != 7 && a != 8)
				{
					printf ("La fila escogida no es valida.\n");
					printf ("Introduzca de nuevo: ");
					scanf ("\n%c%c", &posicion [0], &posicion [1]);
		
					a = posicion[0] - 65;
					b = posicion[1] - 49;
				}

				else if (b != 0 && b != 1 && b != 2 && b != 3 && b != 4 && b != 5 && b != 6 && b != 7 && b != 8)
				{
					printf ("La columna escogida no es valida.\n");
					printf ("Introduzca de nuevo: ");
					scanf ("\n%c%c", &posicion [0], &posicion [1]);

					a = posicion[0] - 65;
					b = posicion[1] - 49;
				}

				else
				{
					printf ("La posicion esta ocupada.\n");
					printf ("Introduzca de nuevo: ");
					scanf ("\n%c%c", &posicion [0], &posicion [1]);
					
					a = posicion[0] - 65;
					b = posicion[1] - 49;
				}
			}
	
			printf ("Introduce el numero: ");	
			scanf ("%d", &numero);
			
			while (numero != 1 && numero != 2 && numero != 3 && numero != 4 && numero != 5 && numero != 6 && numero != 7 && numero != 8 && numero != 9)
			{
				printf ("El numero escogido no es valido.\n");
				printf ("Introduzca de nuevo:");
				scanf ("%d", &numero);
			}

			printf ("El numero %d sera introducido en la posicion %c%c.\n", numero, posicion[0], posicion [1]);
			x.panel [a][b] = numero + '0';

			dibujatablero (x);

			x.espacios = x.espacios - 1;
		}
	
	}

	printf ("El juego ha terminado, gracias por jugar.\n");
}