Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Dayleap en 28 Abril 2016, 18:26 pm



Título: Ayuda: programa en lenguaje C
Publicado por: Dayleap en 28 Abril 2016, 18:26 pm
Hola buenas, os pido ayuda con este programa. Lo que quiero es ordenar unos caracteres de tal manera que primero se impriman '*' , luego '|' y final mente' _ '. Para eso tiene que  comparar un array predefinido con valor= 1234 , con otro que introducimos por teclado. Si estos dos son iguales el programa para de ejecutarse; sino sigue. Si el valor es correcto ha de escribir ****. Si un numero esta escrito en el array pero esta en una posicion incorrecta | y si no esta en el array una _. Por ejemplo : introducimos 1245 y nos devuelve **|_ , otro ejemplo; introducimos 3524 y devuelve *||_
 Muchas gracias!!Y tened paciencia por favor , soy nuevo en programacion.

ADEMAS si no fuera mucho pedir podriais decirme a que se debe este fallo en concreto:

si escribimos cualquier numero mayor de 4 lo da por bueno, cuando deberia de escribir una barra baja ya que en el array solo hay numeros  menores de 4.

Código
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<ctype.h>
  4. #include<math.h>
  5. #include<stdlib.h>
  6. #include<string.h>
  7.  
  8. int main (){
  9. char cad[5]="1234";
  10. char resp[5];
  11. char resul[5];
  12. char correc[5]="****";
  13. int asteriscos=0, barras=0, bajas=0, intentos=0, controlador=0,i,j,k,q;
  14.   do{
  15.  
  16.  
  17. intentos ++;
  18. printf("Escribe una cadena de 4 numeros + ENTER: ");
  19. scanf("%s", &resp);
  20. for(i=0;i>4;i++){
  21. if(resp[i]<'0'||resp[i]>'9'){
  22. printf("No pueden ser caracteres, tienen que ser numeros");}
  23. else continue;}
  24. if (strlen(resp)!=4 ){//si la cadena escrita es demasiado larga o corta
  25. printf("Error de longitud de cadena ");}
  26.  
  27.  
  28.  
  29.  
  30. for(i = 0; i < 4; i++){
  31. for(j = 0; j < 4; j++){
  32.  
  33.  
  34. if (i == j && cad[i]==resp[j]){
  35. asteriscos=asteriscos+1;j==4;}
  36.  
  37. if(i != j && cad[i]==resp[j]){
  38. barras=barras+1;j==4;}
  39.  
  40. else {
  41. bajas=bajas+1;j==4;
  42. }
  43. }
  44. }
  45.  
  46.  
  47.  
  48. for(q=0;q<asteriscos;q ++){
  49. resul[q]='*';}
  50. for(q=asteriscos; q<asteriscos+barras; q++){
  51. resul[q]='/';}
  52. for(q=asteriscos+barras; q<4; q++){
  53. resul[q]='_';}
  54. for(k = 0; k<4; k++){
  55. printf("%c", resul[k]);}
  56.  
  57. printf("\n");
  58.  
  59. if(strcmp(resul,cad)==0){
  60. intentos==100;}
  61. }while(intentos<100);return 0;}

MOD EDIT: Titulo y etiqueta GeSHi corregidos.


Título: Re: Ayuda: programa en lenguaje C
Publicado por: MAFUS en 28 Abril 2016, 21:36 pm
Bueno, vamos con unos pocos fallos, los más fáciles:

Controla las asignaciones porqué lo que haces es mirar igualdad:
donde escribes j==4 e intentos==100
debe haber j=4 e intentos=100

Tienes un fallo en scanf: el nombre de un array ya es un puntero.
donde escribes scanf("%s", &resp)
debes haber scanf("%s", resp)

Para contar el número de asteriscos, barras verticales y barras bajas en cada iteración estos deben empezar a contar a partir de 0. Así después de do{ debe haber
asteriscos=0, barras=0, bajas=0;

Para el problema de lógica: sea cual sea lo que ha ocurrido acabas haciendo que j=4 y por tanto se detiene ese bucle y por tanto siempre comparas cad==resp[0]. Hay que reescribir eso totalmente.


Título: Re: Ayuda: programa en lenguaje C
Publicado por: Dayleap en 28 Abril 2016, 23:10 pm
Gracias MAFUS intentare volver a escribirlo desde el principio a ver si corrigo el fallo  muchas gracias por contestar, publicare si soy capaz de corregir algo el codigo o no



Bueno, vamos con unos pocos fallos, los más fáciles:

Controla las asignaciones porqué lo que haces es mirar igualdad:
donde escribes j==4 e intentos==100
debe haber j=4 e intentos=100

Tienes un fallo en scanf: el nombre de un array ya es un puntero.
donde escribes scanf("%s", &resp)
debes haber scanf("%s", resp)

Para contar el número de asteriscos, barras verticales y barras bajas en cada iteración estos deben empezar a contar a partir de 0. Así después de do{ debe haber
asteriscos=0, barras=0, bajas=0;

Para el problema de lógica: sea cual sea lo que ha ocurrido acabas haciendo que j=4 y por tanto se detiene ese bucle y por tanto siempre comparas cad==resp[0]. Hay que reescribir eso totalmente.

Bueno, el fallo estaba en donde inicializaba las variables asteriscos, baras y bajas al cambiarlo y pornerlo dentro del do{}while ya funciona correctamente sacando una pequeña cosa que no se como hacer para que pare de ejecutarse el bucle ya que solo para cuando el numero de intentos es igual a 100


MOD EDIT: NO hacer doble post.


Título: Re: Ayuda: programa en lenguaje C
Publicado por: MAFUS en 28 Abril 2016, 23:55 pm
Mira si el número de asteriscos en 4. Si es así para el bucle. Puedes ponerlo en la condición del while: intentos<100 && asteriscos!=4


Título: Re: Ayuda: programa en lenguaje C
Publicado por: Dayleap en 29 Abril 2016, 09:53 am
Si , tambien funciona eso que dices. El tema es que tenia un controlador porque tenia que cumplir muchas mas condiciones al final entonces cree la variable tipo int controlador y cuando sea igual a 1 acaba el bucle