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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema programacion en C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema programacion en C.  (Leído 2,160 veces)
euroesp

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Problema programacion en C.
« en: 24 Julio 2016, 15:49 pm »

Buenas,

Estoy escribiendo un programa que a partir de dos nombres (en forma de string) y dos numeros, me escriba en un fichero los datos de la primera columna que estan comprendidos entre los dos numeros, en un segundo fichero. El problema que me sale es que al leer el valor de la columna y compararmelo con los limites que le he dado en un princio, me coge el valor cogido de la columna como 0.0, en lugar del valor ha tomado del primer fichero. Por tal de encontrar el error, he escrito una serie de printf y he averiguado que el valor del primer fichero se guarda correctamente en "t" pero luego, a la hora de operar para enconrar "z" o para mirar si esta dentro del intervalo, me utiliza el valor 0.0, y no he conseguido averiguar porque.

Les adjunto el codigo:

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

#define dim 5
#define dim2 10000

void fichero1 (char* nombre, char* nombrefinal, double juliana1, double juliana2);

int main(){

 double juliana1,juliana2;
 char a[dim] = "a.txt",b[dim] = "b.txt";

 juliana1 = 100000000;
 juliana2 = 200000000;


 fichero1(a,b,juliana1,juliana2);


  return 0;

}

void fichero1 (char* nombre, char* nombrefinal, double juliana1, double juliana2){

   int i,i2;
   char aux[dim2] = "";
   long double x,t=0,y1,y2;
   double z;

   y2 = 0.0;

   printf("%f \n", juliana1);
   printf("%f \n", juliana2);

   FILE* archivo = NULL;
   FILE* datos = NULL;

   archivo = fopen(nombre, "r");
   datos = fopen(nombrefinal, "w");

     for (i=1;i<40;i++){

        if (i <= 32){

           fscanf(archivo, " %[^\n]", &aux);
        }

        else{

           for (i2=1;i2<=3;i2++){

              if (i2==1){

                    fscanf(archivo, "%lf", &t);
                   
                    //Ponemos unos printf de prueba.
                   
                    printf("juliana1 = %lf \n", juliana1);
                    printf("t = %lf \n", t); // <-- aqui escribe el valor correcto de t.
                    z = t-juliana1; // <-- aqui, sin embargo, toma t = 0 para calcular z.
                    printf("z = %f \n", z);
                   
                    if (t>juliana2){
                        goto BCN;
                    }
                    if ((t > juliana1) && (t < juliana2)){ // <-- aqui tambien coje t = 0.
                   fprintf(datos, "%lf ", t);
                    }
                  }

                  if (i2==2){

                    fscanf(archivo, "%lf", &y1);
                    if ((t > juliana1) && (t < juliana2)){
               fprintf(datos, "%lf ", y2);
                    }
                  }

              if (i2==3){

                    fscanf(archivo, "%lf", &x);
               if ((t > juliana1) && (t < juliana2)){
               fprintf(datos, "%lf \n", x);
                    }
                  }
             }
          }
       }
    BCN:

   return;
}

Gracias por adelantado.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema programacion en C.
« Respuesta #1 en: 24 Julio 2016, 16:34 pm »

No sé si tiene que ver, pero si pones double en vez de long double en la variable t, ¿hay algún cambio?
¿Es necesario el long double?


En línea

euroesp

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema programacion en C.
« Respuesta #2 en: 26 Julio 2016, 13:44 pm »

Buenas,

gracias por tu respuesta, lo he solucionado, aunque no se muy bien como. Te paso la funcion final:

double fichero1 (FILE *datos, char* nombre, double juliana1, double juliana2){

   int i,i2;
   char aux[dim2] = "", tc[dim2] = "";
   long double x,y1,y2;
   double z1,z2,t;

   i = 0;
   y2 = 0.0;

   FILE* archivo = NULL;

   archivo = fopen(nombre, "r");

     while (!feof(archivo)){

          i++;

        if (i <= 32){

           fscanf(archivo, " %[^\n]", &aux);
            }

        else{

           for (i2=1;i2<=3;i2++){

              if (i2==1){

                    fscanf(archivo, "%s", &tc);
                    t = atof(tc);
                    z1 = juliana1 - t;
                    z2 = juliana2 - t;
                    if (z2 < 0){
                        goto BCN;
                    }
                    if ((z1 < 0) && (z2 > 0)){

                   fprintf(datos, "%f ", t);
                    }
                  }

                  if (i2==2){

                    fscanf(archivo, "%lf", &y1);
                    if ((z1 < 0) && (z2 > 0)){
               fprintf(datos, "%lf ", y2);
                    }
                  }

              if (i2==3){

                    fscanf(archivo, "%lf", &x);
               if ((z1 < 0) && (z2 > 0)){
               fprintf(datos, "%lf \n", x);
                    }
                  }
             }
          }
       }

    BCN:

    printf("%f \n", t);

    fclose(archivo);

   return t;
}

Gracias por todo.
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Problema programacion en C.
« Respuesta #3 en: 26 Julio 2016, 15:28 pm »

Sin tener en cuenta el posible error, veo que parte de tu código me parece un poco absurda xD. A esto me refiero:

Código
  1. for(i2 = 1; i2 <= 3; i2++) {
  2. if(i2 == 1) {
  3. // Fragmento de código donde no se usa i2
  4. }
  5.  
  6. if(i2 == 2) {
  7. // Fragmento de código donde no se usa i2
  8. }
  9.  
  10. if(i2 == 3) {
  11. // Fragmento de código donde no se usa i2
  12. }
  13. }

¿No sería más lógico, no se yo, directamente no usar el bucle for? xD

El código similar es el siguiente:
Código
  1. // Fragmento 1 de código donde no se usa i2
  2.  
  3. // Fragmento 2 de código donde no se usa i2
  4.  
  5. // Fragmento 3 de código donde no se usa i2
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema en programacion..!
Programación General
ThonyMaster 0 1,895 Último mensaje 14 Julio 2010, 20:40 pm
por ThonyMaster
Problema de programacion
Programación C/C++
jberlin 1 2,112 Último mensaje 27 Enero 2011, 01:39 am
por Destro-
problema programacion
Programación C/C++
furia89 0 1,402 Último mensaje 27 Junio 2011, 00:53 am
por furia89
Problema en programación en C
Programación C/C++
lucashuerga 3 2,017 Último mensaje 5 Marzo 2014, 06:09 am
por leosansan
Problema programación con SDL
Programación C/C++
erickgracia 2 1,796 Último mensaje 7 Febrero 2015, 20:32 pm
por erickgracia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines