• Sábado 18 de Mayo de 2024, 18:09

Autor Tema:  Se me cierra.  (Leído 1245 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Se me cierra.
« en: Viernes 2 de Enero de 2009, 17:04 »
0
Código: Text
  1.  
  2. #include<stdio.h>
  3.  
  4. int calcul_rombo(int alcada);
  5. int calcul_rectangle(int alcada);
  6.  
  7. int main()
  8. {
  9.     int alcada,r,re;
  10.        
  11.     printf("Programa que dibuxa un rectangle, un rombo i una flecha, depenent de l'alcada que fiqui l'usuario n");
  12.     printf("n");
  13.     printf("n");
  14.  
  15.     printf("Introdueix l'alcada: n");
  16.     scanf("%c",&alcada);
  17.    
  18.     r=calcul_rombo(alcada);
  19.     re=calcul_rectangle(alcada);
  20.    
  21.    
  22.    getchar();
  23.    getchar();
  24. }
  25. int calcul_rombo(int alcada)
  26. {
  27.  
  28.       int files,simbols,espai,meitat,result,r;
  29.      
  30.       meitat= alcada/2;
  31.       meitat = meitat-1;
  32.      
  33.       for (files = 1; files<=meitat; files++)
  34.       {
  35.          
  36.           for (espai=1; espai<=meitat-files+1; espai++)
  37.           {
  38.                
  39.               printf(" ");
  40.           }
  41.            
  42.           printf("*");
  43.           if(files>1){
  44.             for (simbols = 1; simbols<(files-1)*2; simbols++)
  45.             {
  46.                 printf(" ");  
  47.             }
  48.             printf("*");
  49.         }
  50.              
  51.        printf("n");          
  52.       }
  53.       for (;files>=1; files--)
  54.       {
  55.         for (espai=1; espai<=meitat-files+1; espai++)
  56.           {
  57.                
  58.               printf(" ");
  59.           }
  60.            
  61.           printf("*");
  62.           if(files>1){
  63.             for (simbols = 1; simbols<(files-1)*2; simbols++)
  64.             {
  65.                 printf(" ");  
  66.             }
  67.             printf("*");
  68.         }
  69.              
  70.        printf("n");          
  71.       }
  72.       return r;
  73. }      
  74. int calcul_rectangle(int alcada)
  75. {
  76.     int files,colum,espai,re;
  77.        
  78.         printf("*********");
  79.         printf("n");
  80.      
  81.         for (files = 1; files<=alcada-2; files++)
  82.        {
  83.             printf("*");
  84.            
  85.             for (espai=1; espai<=7; espai++)
  86.             {
  87.                 printf(" ");
  88.                
  89.             }  
  90.                 for (colum = 1; colum<=(alcada -(alcada-1)); colum++)
  91.                 {
  92.                    printf("*");
  93.                 }
  94.                 printf ("n");
  95.            
  96.         }
  97.      
  98.         printf("*********");
  99.         return re;
  100.        
  101. }
  102.              
  103.  
  104.  
  105.  

Alguien sabe pq se me cierra solo, si tengo puestos los getchar.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Se me cierra.
« Respuesta #1 en: Viernes 2 de Enero de 2009, 17:44 »
0
Yo veo un bucle infinito y al compilar dos warnings, lineas 72 y 99.

DEPURALO, asi sabras en que punto se termina el programa.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Se me cierra.
« Respuesta #2 en: Viernes 2 de Enero de 2009, 18:48 »
0
Ami no me da ningun warning, y no se q tengo q hacer para depurarlo xDDD

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Se me cierra.
« Respuesta #3 en: Viernes 2 de Enero de 2009, 18:51 »
0
En ambas lineas estas usando variables locales sin inicializar con lo cual su valor es totalmente indefinido; no se que IDE (y compilador) estaras usando pero deberia tener una opcion para depurar, si estas bajo Windows podes usar el WinDbg.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

tyrell

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Se me cierra.
« Respuesta #4 en: Viernes 2 de Enero de 2009, 22:56 »
0
Cambia la linea 16:
scanf("%c",&alcada);
por esto:
scanf("%d",&alcada);

Al usar %c estas leyendo caracter en una variable de tipo entero por lo que no almacena correctamente el valor que introduces por teclado.

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Se me cierra.
« Respuesta #5 en: Viernes 2 de Enero de 2009, 23:27 »
0
Ah muchas gracias por eso de la d, una cosa no se si me podreis explicar, para que una figura salga al lado de la otra y no debajo que hay q utilizar, no se si es una cosa dificl de explicar :S