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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con programa en C [Funciona y aveces se cae]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con programa en C [Funciona y aveces se cae]  (Leído 2,034 veces)
ignacio8550

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con programa en C [Funciona y aveces se cae]
« en: 30 Junio 2012, 08:53 am »

Hola amigos estoy buscado el error al siguiente código que estoy haciendo, me funciona aveces pero en ocasiones se me cae y no le puedo encontrar el error, el programa recibe un txt cuyo contenido es:


4

10 30 4 10
80 90 110 1
0 40 50 60
70 85 200 35



#include<math.h>
#include<stdio.h>

#define TRUE 1
#define FALSE 0

void print_solution(int n,int x[])
{
      char c[n][n];
      int i,j;
      for(i=1;i<=n;i++)
     {
         for(j=1; j<=n; j++)
        {
            c[j]='-';
        }
     }

    for(i=1;i<=n;i++)
   {
         c[x]='Q';
    }

    for( i=1;i<=n;i++)
   {
         for(j=1;j<=n;j++)
        {
              printf("%c",c[j]);
         }
         printf("\n");
    }
}


int place(int x[],int k)
{   
    int i;
    for(i=1;i<k;i++)
   {
         if(x==x[k]||i-x==k-x[k]||i+x==k+x[k])
         {
             return FALSE;
          }
   }
    return TRUE;
}



int main()
{
     FILE *entrada;
     entrada = fopen("Entrada.txt","r");
     if (entrada == NULL){  
     printf("\nError de apertura del archivo. \n\n");
     }else{   
     if(!feof(entrada))
    {
         int n,i,j;
         fscanf(entrada,"%d",&n);fflush(stdin);
         printf("%d",n);
         for(i = 1; i <= n; i++)
         {
             printf("\n");
             for(j = 1; j<=n; j++)
            {
                 fscanf(entrada,"%d",&g[j]);fflush(stdin);
                 printf("%d ",g[j]);
             }
          }
           int g[n][n];
          
          for(i = 1; i <= n; i++)
         {
               for(j = 1; j<=n; j++)
               {
                   fscanf(entrada,"%d",&g[j]);fflush(stdin);
                   printf("%d ",g[j]);
                }
          }

           int x[n];
           int count=0;
           int k=1;
           int suma = 0;
           x[k]=0;
           i = 1;


          while(k!=0)
          {
               if(k == 1){suma = 0;}
               x[k]=x[k]+1;
              
               while((x[k]<=n)&&(!place(x,k)))
              {
                  x[k]=x[k]+1;
               }
               if(x[k]<=n)
              {
                  suma = suma + g[x[k]];
                  if(k==n)
                  {
                       printf("\n\n\n\t%d",suma);
                       count++;
                       printf("\n\nSolution %d  is : \n\n",count);
                       print_solution(n,x);
                   }
                   else
                  {
                       k++;     
                       i++;
                       x[k]=0;
                   }
                }
                else
                {
                     k--;
                     i--;
                     if(x[k]<=n)
                     {
                         suma = suma - g[x[k]];
                      }
                  }
            }
        }
    }
fclose(entrada);
return 0;
}


« Última modificación: 30 Junio 2012, 09:31 am por ignacio8550 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Ayuda con programa en C [Funciona y aveces se cae]
« Respuesta #1 en: 30 Junio 2012, 09:19 am »

¡Buenas!
Código
  1. for(i = 1; i <= n; i++)
  2. {
  3.    printf("\n");
  4.    for(j = 1; j<=n; j++)
  5.    {
  6.        fscanf(entrada,"%d",&g[i][j]);fflush(stdin);
  7.        printf("%d ",g[i][j]);
  8.    }
  9. }
  10.  
  11. int g[n][n];
  12.  
  13. for(i = 1; i <= n; i++)
  14. {
  15.    printf("\n");
  16.    for(j = 1; j<=n; j++)
  17.    {
  18.        fscanf(entrada,"%d",&g[i][j]);fflush(stdin);
  19.        printf("%d ",g[i][j]);
  20.    }
  21. }
  22.  

Varias cosas. Primero, utiliza las etiquetas GeSHi para poner codigos, sino esto es ilegible.

Utilizas g antes de declararla, y te estas saliendo de rango con los subindices.

fflush solo se debe utilizar sobre flujos de salida. si sabes que alguna funcion de lectura puede dejar datos en stdin, limpialo a mano:

Código
  1. int c;
  2.  
  3. //lectura
  4. while((c = getchar()) != '\n' && c != EOF); //para limpiar la entrada
  5.  

No he seguido leyendo porque, como ya te he dicho, es horroroso tener que leer ese codigo sin tabulaciones ni las correspondientes etiquetas de codigo. Repasa el resto de codigo.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda programa en VB que solo funciona 15 minutos y quiero que dure infinito. « 1 2 »
Ingeniería Inversa
olevlove 10 4,622 Último mensaje 27 Abril 2010, 22:28 pm
por MCKSys Argentina
Ares aveces no me abre:/
Software
kanoran 4 4,697 Último mensaje 26 Diciembre 2010, 10:10 am
por snaker190
por que la luz de mi antena alfa aveces parpadea mucho y aveces no ¿
Hardware
jejeey 2 4,094 Último mensaje 28 Febrero 2011, 21:29 pm
por jejeey
Disco duro no le detecta aveces « 1 2 »
Hardware
estermi1 13 9,463 Último mensaje 12 Abril 2011, 17:54 pm
por Aprendiz-Oscuro
la PC no reconoce aveces mi MP4
Hardware
liany 2 3,889 Último mensaje 15 Abril 2011, 20:23 pm
por main_menu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines