elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  fallo inexplicable en este programa, ayuda por favor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: fallo inexplicable en este programa, ayuda por favor  (Leído 3,456 veces)
Adri124

Desconectado Desconectado

Mensajes: 14


Ver Perfil
fallo inexplicable en este programa, ayuda por favor
« en: 11 Octubre 2010, 20:37 pm »

Hola buenas, desde hace algunos dias me he roto la cabeza con este programa, el cual consiste en un tablero de sudoku que pide numeros (en este caso caracteres) para ir rellenando dicho tablero de sudoku.

La version de este programa que utiliza enteros en vez de caracteres me salió sin ningún problema, pero en esta version, en la que se pide realizar lo mismo pero con caracteres no entiendo por qué se salta scanf's, rellena irracionalmente espacios, desordenando el tablero, etc...

He comprobado que el tipo de datos valor sea char, que los scanf recojan los caracteres con %c, que el tablero muestre los numeros con %c...

El fallo parece estar a partir de introducir el primer valor que se pide, a partir de ahí es el caos, repite todo de 2 en 2.

Creedme, si no estuviera tan desquiciado no habría preguntado. Puede que sea una tontería, pues estoy empezando, pero no lo entiendo. Respecto al uso de bucles, no he usado porque no nos lo permiten aún, así como punteros, etc... la estructura que tengo es la pedida.

Aquí el código fuente del programa:

Código
  1. #include <stdio.h>
  2. #define TAM 9  //Por mayor comodidad y fiabilidad, establecemos que TAM equivalga a la constante 9
  3.  
  4. void main()
  5. {
  6. char valor[TAM];
  7. int hueco = TAM;  //El número de huecos del tablero será igual a TAM hasta que se decremente en una unidad sucesivamente
  8.  
  9. double porcentaje;  //Declaramos el tipo de dato double porcentaje para mostrar el % adecuado en cada momento
  10.  
  11.  
  12.  
  13. valor [0]='.';
  14. valor [1]='.';
  15. valor [2]='.';
  16. valor [3]='.';
  17. valor [4]='.';  //Inicializamos con '.' todas las variables, como se pide.
  18. valor [5]='.';
  19. valor [6]='.';
  20. valor [7]='.';
  21. valor [8]='.';
  22.  
  23.  
  24. printf("  | 1 2 3 |\n");
  25. printf("- + - - - +\n");
  26. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  27. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);  //Mostramos el tablero con todos los huecos (variables) con '.'
  28. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  29. printf("- - - - - -\n");
  30. printf("\n");
  31.  
  32.  
  33. printf("Primer Valor: ");
  34. scanf("%c", &valor[0]);  //En ésta ocasión y las siguientes, iremos almacenando en el tablero los valores del usuario
  35.  
  36. porcentaje = (100/9.)*(TAM-8);  //Cálculo del porcentaje, que se irá actualizando conforme vayamos restando una unidad a TAM
  37.  
  38. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  39. printf("  | 1 2 3 |\n");
  40. printf("- + - - - +\n");
  41. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  42. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);  //Comienzo del proceso que se repite hasta alcanzar el número de
  43. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);  //huecos 0 y porcentaje del tablero lleno 100.00%
  44. printf("- - - - - -\n");
  45. printf("\n");
  46.  
  47.  
  48. valor [0];
  49. valor [1]='.';
  50. valor [2]='.';
  51. valor [3]='.';
  52. valor [4]='.';
  53. valor [5]='.';
  54. valor [6]='.';
  55. valor [7]='.';
  56. valor [8]='.';
  57.  
  58.  
  59.  
  60. printf("Segundo valor: ");
  61. scanf("%c", &valor[1]);
  62.  
  63. porcentaje = (100/9.)*(TAM-7);
  64.  
  65. hueco--;
  66.  
  67. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  68. printf("  | 1 2 3 |\n");
  69. printf("- + - - - +\n");
  70. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  71. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  72. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  73. printf("- - - - - -\n");
  74. printf("\n");
  75.  
  76.  
  77.    valor [0];
  78. valor [1];
  79. valor [2]='.';
  80. valor [3]='.';
  81. valor [4]='.';
  82. valor [5]='.';
  83. valor [6]='.';
  84. valor [7]='.';
  85. valor [8]='.';
  86.  
  87.  
  88.  
  89. printf("Tercer valor: ");
  90. scanf("%c", &valor[2]);
  91.  
  92. porcentaje = (100/9.)*(TAM-6);
  93.  
  94. hueco--;
  95.  
  96. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  97. printf("  | 1 2 3 |\n");
  98. printf("- + - - - +\n");
  99. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  100. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  101. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  102. printf("- - - - - -\n");
  103. printf("\n");
  104.  
  105.  
  106.    valor [0];
  107. valor [1];
  108. valor [2];
  109. valor [3]='.';
  110. valor [4]='.';
  111. valor [5]='.';
  112. valor [6]='.';
  113. valor [7]='.';
  114. valor [8]='.';
  115.  
  116.  
  117.  
  118. printf("Cuarto valor: ");
  119. scanf("%c", &valor[3]);
  120.  
  121. porcentaje = (100/9.)*(TAM-5);
  122.  
  123. hueco--;
  124.  
  125. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  126. printf("  | 1 2 3 |\n");
  127. printf("- + - - - +\n");
  128. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  129. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  130. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  131. printf("- - - - - -\n");
  132. printf("\n");
  133.  
  134.  
  135.    valor [0];
  136. valor [1];
  137. valor [2];
  138. valor [3];
  139. valor [4]='.';
  140. valor [5]='.';
  141. valor [6]='.';
  142. valor [7]='.';
  143. valor [8]='.';
  144.  
  145.  
  146.  
  147. printf("Quinto valor: ");
  148. scanf("%c", &valor[4]);
  149.  
  150. porcentaje = (100/9.)*(TAM-4);
  151.  
  152. hueco--;
  153.  
  154. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  155. printf("  | 1 2 3 |\n");
  156. printf("- + - - - +\n");
  157. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  158. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  159. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  160. printf("- - - - - -\n");
  161. printf("\n");
  162.  
  163.  
  164.    valor [0];
  165. valor [1];
  166. valor [2];
  167. valor [3];
  168. valor [4];
  169. valor [5]='.';
  170. valor [6]='.';
  171. valor [7]='.';
  172. valor [8]='.';
  173.  
  174.  
  175.  
  176. printf("Sexto valor: ");
  177. scanf("%c", &valor[5]);
  178.  
  179. porcentaje = (100/9.)*(TAM-3);
  180.  
  181. hueco--;
  182.  
  183. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  184. printf("  | 1 2 3 |\n");
  185. printf("- + - - - +\n");
  186. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  187. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  188. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  189. printf("- - - - - -\n");
  190. printf("\n");
  191.  
  192.  
  193.    valor [0];
  194. valor [1];
  195. valor [2];
  196. valor [3];
  197. valor [4];
  198. valor [5];
  199. valor [6]='.';
  200. valor [7]='.';
  201. valor [8]='.';
  202.  
  203.  
  204. printf("Septimo valor: ");
  205. scanf("%c", &valor[6]);
  206.  
  207. porcentaje = (100/9.)*(TAM-2);
  208.  
  209. hueco--;
  210.  
  211. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  212. printf("  | 1 2 3 |\n");
  213. printf("- + - - - +\n");
  214. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  215. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  216. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  217. printf("- - - - - -\n");
  218. printf("\n");
  219.  
  220.  
  221.    valor [0];
  222. valor [1];
  223. valor [2];
  224. valor [3];
  225. valor [4];
  226. valor [5];
  227. valor [6];
  228. valor [7]='.';
  229. valor [8]='.';
  230.  
  231.  
  232. printf("Octavo valor: ");
  233. scanf("%c", &valor[7]);
  234.  
  235. porcentaje = (100/9.)*(TAM-1);
  236.  
  237. hueco--;
  238.  
  239. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  240. printf("  | 1 2 3 |\n");
  241. printf("- + - - - +\n");
  242. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  243. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  244. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  245. printf("- - - - - -\n");
  246. printf("\n");
  247.  
  248.  
  249.    valor [0];
  250. valor [1];
  251. valor [2];
  252. valor [3];
  253. valor [4];
  254. valor [5];
  255. valor [6];
  256. valor [7];
  257. valor [8]='.';
  258.  
  259.  
  260.  
  261. printf("Ultimo valor: ");
  262. scanf("%c", &valor[8]);
  263.  
  264. porcentaje = (100/9.)*(TAM);
  265.  
  266. hueco--;
  267.  
  268. printf("\nNumero de huecos: %d. Porcentaje del tablero lleno: %.2lf %%\n\n", hueco, porcentaje);
  269. printf("  | 1 2 3 |\n");
  270. printf("- + - - - +\n");
  271. printf("A | %c %c %c |\n", valor[0], valor[1], valor[2]);
  272. printf("B | %c %c %c |\n", valor[3], valor[4], valor[5]);
  273. printf("C | %c %c %c |\n", valor[6], valor[7], valor[8]);
  274. printf("- - - - - -\n");
  275. printf("\n");
  276.  
  277.        valor [0];
  278. valor [1];
  279. valor [2];
  280. valor [3];
  281. valor [4];
  282. valor [5];
  283. valor [6];
  284. valor [7];
  285. valor [8];
  286. }


« Última modificación: 11 Octubre 2010, 23:29 pm por Littlehorse » En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #1 en: 11 Octubre 2010, 20:55 pm »

Para este tipo de cosas como tableros, te recomendaría trabajar con arrays de dos dimensiones (una tabla).


En línea

Adri124

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #2 en: 11 Octubre 2010, 21:02 pm »

Ya lo pensé, pero tampoco nos dejan porque aún no está explicado en clase

Lh: No hagas doble post, utiliza el botón modificar.

por curiosidad he probado con tabla (dos dimensiones) y tampoco
« Última modificación: 11 Octubre 2010, 23:28 pm por Littlehorse » En línea

iCore

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #3 en: 11 Octubre 2010, 23:18 pm »

por curiosidad he probado con tabla (dos dimensiones) y tampoco

Que compilador usas?
En línea

Adri124

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #4 en: 12 Octubre 2010, 00:11 am »

Hola, uso el compilador del codeblocks en windows, el GCC adaptado a windows.
En línea

iCore

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #5 en: 12 Octubre 2010, 00:15 am »

Hola, uso el compilador del codeblocks en windows, el GCC adaptado a windows.

Vale, aunque el compilador es lo de menos, ya que C/C++ son casi las mismas sintaxis, voy a probar tu código y te aviso si encontré la falla vale?.

Regards;

-----------------------------------------------------------------------------------------------

Edito:

Te habeis dado cuenta lo que pasa si en un principio como valor 1, colocas los numeros que quieras (completando una cadena de 9)?

Se rellenan tdos los recuadros con todo el orden, menuda locura :xD... me ando iniciando con C++ y valla que no encuentro la falla aún... espero dar con ella pronto :P.

Prueba:


Regards;
« Última modificación: 12 Octubre 2010, 01:33 am por iCore » En línea

Adri124

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #6 en: 12 Octubre 2010, 12:13 pm »

No había caido en eso!! salta a la ultima posicion si pones 012345678!! tambien he pensado que este problema venga precisamente de que se trabaja con caracteres y haya que limitarlos con /0 pero ni idea...

Tambien acabo de probar a hacer la tabla con strings (una locura) y el programa revienta por todas partes, no hay forma

Lh: No hagas doble post, utiliza el botón modificar.

Ya está resuelto!!! al final el único misterio que tenía era el siguiente, por si alguna vez os pasa: antes del especificador de formato %c del scanf hay que dejar un espacio, para indicarle que no coja espacios (me estaba inundando de espacios el tablero y se descolocaba), quedando al final así: scanf(" %c", &valor[0]);
« Última modificación: 12 Octubre 2010, 18:00 pm por Littlehorse » En línea

iCore

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: fallo inexplicable en este programa, ayuda por favor
« Respuesta #7 en: 12 Octubre 2010, 18:23 pm »

No había caido en eso!! salta a la ultima posicion si pones 012345678!! tambien he pensado que este problema venga precisamente de que se trabaja con caracteres y haya que limitarlos con /0 pero ni idea...

Tambien acabo de probar a hacer la tabla con strings (una locura) y el programa revienta por todas partes, no hay forma

Lh: No hagas doble post, utiliza el botón modificar.

Ya está resuelto!!! al final el único misterio que tenía era el siguiente, por si alguna vez os pasa: antes del especificador de formato %c del scanf hay que dejar un espacio, para indicarle que no coja espacios (me estaba inundando de espacios el tablero y se descolocaba), quedando al final así: scanf(" %c", &valor[0]);

Valla valla yo me lié con otras cosas, de hecho intentaba con arrays y ni así lograba :xD un gusto que hayas solucionado tu problema, aunque no ayude en nada igual te las arreglaste!; esa info me servirá para después.

Regards;
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Corriente electrica o fallo del portatil? ayuda por favor « 1 2 »
Hardware
silver_dh 17 7,195 Último mensaje 21 Noviembre 2011, 18:25 pm
por silver_dh
inexplicable Presario F700 Ayuda
Hardware
Ripperr0x 6 12,972 Último mensaje 1 Marzo 2012, 13:15 pm
por Ripperr0x
Una ayuda con este programa por favor
Programación C/C++
virgimonlon21v 2 5,034 Último mensaje 15 Noviembre 2012, 00:43 am
por virgimonlon21v
por favor ayuda con este programa no entiendo como hacerlo
Programación C/C++
enrix507 1 2,030 Último mensaje 16 Julio 2014, 06:41 am
por engel lex
ayudaaaaaa!!!!con este programa por favor plisss y nos hacemos amigos
Programación General
MGL9 4 3,103 Último mensaje 28 Enero 2021, 01:08 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines