C/Visual C - Problema en el codigo del programa - No lee el char

   
Vista:

Problema en el codigo del programa - No lee el char

Publicado por Hector (11 intervenciones) el 10/07/2014 21:52:05
Buenas, estoy haciendo un programa de buscaminas donde una de sus funciones es pedir las coordenadas de filas y columnas del usuario, empeze a hacer la funcion de coordenadas por separado ya que tiene un problema al pedir las coordenada de columna.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#define FILAS 12
#define COLUMNAS 10
 
int convertir(char letra)
{
	int i;
	char columna[]={'A','B','C','D','E','F','G','H','I','J'};
 
	letra=toupper(letra);
 
	for(i=0;i<FILAS;i++){
		if (letra==columna[i])
            return i;
	}
}
 
 
 
int main()
{
    char letras_d;
    int coordenada1, coordenada2;
 
    puts("\nIngrese coordenada de filas (1-12): ");
    scanf("%d",&coordenada1);
    puts("\nIngrese coordenada de columnas (A-J): ");
    scanf("%c",&letras_d);
 
    coordenada1 = coordenada1 - 1;
    coordenada2 = convertir(letras_d);
 
    printf("\ncoordenada 1= %d\ncoordenada 2= %d", coordenada1, coordenada2);
 
    return 0;
}


El programa al llegar a la parte de pedir el valor de letras se cierra inmediatamente sin dejarme ingresar la letra y me tira un error, no hay problema si pido directamente la coordenada2 en forma de numero scanf("%d",&coordenada2); pero necesito que funcione con las letras ya que eso forma parte de las especificaciones para hacer el programa.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

Problema en el codigo del programa - No lee el char

Publicado por JuanC (35 intervenciones) el 11/07/2014 01:00:19
creo que en la línea
for(i=0;i<FILAS;i++){

debe ir

for(i=0;i<COLUMNAS;i++){

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en el codigo del programa - No lee el char

Publicado por Hector (11 intervenciones) el 11/07/2014 02:26:43
el problema todavia persiste, aunque voy a poner ese codigo que colocaste ya que no tiene sentido que tenga el valor FILAS para la funcion de columnas xD.

otra cosa consegui algo raro, despues de poner el codigo que me dijiste, decidi cambiarle el orden de comandos al programa, aparentemente el problema se soluciona si cambio el orden de como recibe los valores, asi:

1
2
3
4
puts("\nIngrese coordenada de columnas (A-J): ");
    scanf("%c",&letras_d);
    puts("\nIngrese coordenada de filas (1-12): ");
    scanf("%d",&coordenada1);


al pedir las columnas de primero y luego las filas el problema se soluciona, pero cuando lo pongo alreves se crashea ._., es muy curioso que actue asi...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en el codigo del programa - No lee el char

Publicado por Chema (187 intervenciones) el 11/07/2014 11:03:02
¿Sabes sumar?

char columna[]={'A','B','C','D','E','F','G','H','I','J'};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en el codigo del programa - No lee el char

Publicado por Hector (11 intervenciones) el 11/07/2014 21:54:56
cual es el problema en esa parte?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en el codigo del programa - No lee el char

Publicado por Chema (187 intervenciones) el 12/07/2014 11:32:57
1
2
3
4
5
6
7
#define FILAS 12
 
for(i=0;i<FILAS;i++){
		if (letra==columna[i])
            return i;
	}
}


la suma da como resultado 10, no 12

char columna[]={'A','B','C','D','E','F','G','H','I','J'};

Si no deseas sumar, coloca un valor nulo al final y busca el valor nulo.

char *columna[]={'A','B','C','D','E','F','G','H','I','J', 0x0};

1
2
3
4
5
6
7
8
9
10
char **p;
 
p = columna;
 
for(;*p; p++){
}
 
while(*p){
p++;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en el codigo del programa - No lee el char

Publicado por Chema (187 intervenciones) el 12/07/2014 23:24:58
No es necesario, ni buscar en bucle ni sumar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define IsColum(n) ( ( (n) >= 'A' && (n) <= 'J' ) || \
 ( (n) >= 'a' && (n) <= 'j' ) ? (n) : 0)
 
int main(void){
 
	char ch;
	for (ch = 'a'; ch <= 'z'; ch++){
		if ( !IsColum(ch) )
			printf("No en columna %c\n", ch);
		else
			printf("%c\n", ch);
	}
 
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en el codigo del programa - No lee el char

Publicado por Ricardo (5 intervenciones) el 16/07/2014 20:14:45
La función scanf() usada con %d acepta el número pero no procesa el "Enter" que presionas para ingresar el valor. Este Enter queda pendiente, almacenado en el buffer del teclado. Cuando vas a ingresar el carácter con el siguiente scanf(), se toma ese Enter que había quedado pendiente y el programa sigue de largo. Si quieres resolverlo hazlo así:

scanf("%d",&coordenada1);
fflush(stdin);
scanf("%c",&letra_d);

El fflush(stdin); elimina todos los caracteres pendientes de procesamiento, es decir el Enter.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar