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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cuelgue de programa no se por que
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cuelgue de programa no se por que  (Leído 1,381 veces)
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Cuelgue de programa no se por que
« en: 23 Diciembre 2012, 23:02 pm »

Buenas tengo el siguiente programa que abre un archivo de texto, lee las lineas y las parsea para mostrarlas por consolas, pero cuando termino de mostrarlas todas se cuelga el programa, tienen idea que puede ser? Muchas Gracias, saludos!

Código:
#include<iostream>
#include<string>
#include<fstream>
#include <sstream>

using namespace std; //evita que escriba el nombre del paquete std para cada funcion ej: std::cout...

int main()
{
   
    struct transaccion
    {
         string campo1;
         string campo2;
         string campo3;
         string campo4;
    };
   
    struct transaccion trx;
   
    ifstream input;
    input.open("Transacciones.txt",ios::in);
    char buffer[250];
   
     
    while(!input.eof())
    {
        char *auxSplit;
       
        input.getline(buffer,250);
       
        auxSplit = strtok(buffer,";"); /* Separador ";" */
        trx.campo1 = auxSplit;
        cout << trx.campo1 << "\n";
       
        auxSplit = strtok (NULL, ";");
        trx.campo2 = auxSplit;
        cout << trx.campo2 << "\n";
        auxSplit = strtok (NULL, ";");
       
        trx.campo3 = auxSplit;
        cout << trx.campo3 << "\n";
        auxSplit = strtok (NULL, ";");
       
        trx.campo4 = auxSplit;
        cout << trx.campo4 << "\n";
       
        delete(auxSplit);
    }
   
    input.close();
    return 0;
}


En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Cuelgue de programa no se por que
« Respuesta #1 en: 24 Diciembre 2012, 00:27 am »

Tienes la posibilidad de ir debuggeando el programa? si es asi hacelo, para ir paso a paso viendo como ejecuta cada linea y ver cuando se genera el problema, por ejemplo, podria ser que ese bucle While no termine nunca y por eso se cuelga, pero eso te darias cuenta si debuggeas linea por linea, fijate que no es muy largo tu codigo, asi que encontraras el error facilmente.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Cuelgue de programa no se por que
« Respuesta #2 en: 24 Diciembre 2012, 02:00 am »

Si apenas estas empezando con el lenguaje C++ no necesitas de un depurador, primero porque aun cuando este te indique donde esta el problema difícilmente vas a solucionarlo si no manejas bien el lenguaje (por definición es el caso) y segundo mientras menos variables en lo que concierne a tu aprendizaje mejor.

Los errores en el programa son dos: utilizar eof para verificar si se alcanzo el final del archivo y, por alguna extraña razón, tratas de liberar la memoria apuntada por el puntero (solo debes liberar la memoria reservada con new).

Con los cambios:
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <sstream>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.   struct transaccion {
  11.      string campo1;
  12.      string campo2;
  13.      string campo3;
  14.      string campo4;
  15.   };
  16.   struct transaccion trx;
  17.  
  18.   ifstream input;
  19.   input.open("Transacciones.txt", ios::in);
  20.   char buffer[250];
  21.  
  22.   while (input.getline(buffer, 250)){
  23.      char *auxSplit;
  24.  
  25.      auxSplit = strtok(buffer, ";");
  26.      trx.campo1 = auxSplit;
  27.      cout << trx.campo1 << "\n";
  28.  
  29.      auxSplit = strtok(NULL, ";");
  30.      trx.campo2 = auxSplit;
  31.      cout << trx.campo2 << "\n";
  32.  
  33.      auxSplit = strtok(NULL, ";");
  34.      trx.campo3 = auxSplit;
  35.      cout << trx.campo3 << "\n";
  36.  
  37.      auxSplit = strtok(NULL, ";");
  38.      trx.campo4 = auxSplit;
  39.      cout << trx.campo4 << "\n";
  40.   }
  41.   input.close();
  42.  
  43.   return 0;
  44. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines