Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Black Lotus en 14 Noviembre 2013, 07:48 am



Título: Programa con Archivo ".txt" y un problema a la hora de Salida de Datos
Publicado por: Black Lotus en 14 Noviembre 2013, 07:48 am
Hola a todos solo quería contarles mi caso... Nos dejaron un programa de Automatas, trata de que el usuario ingrese una tabla de transición y que en ella muestre los estados que se desea incluir en la cadena final(la llamo así porque no me acuerdo de él nombre real que debería llevar  :¬¬ :¬¬  :¬¬ ) y de paso me tiene que guardar todas las cadenas que vaya generando el programa en un archivo ".txt"... Logro que guarde en un archivo, sin embargo a la hora de tratar de mostrar datos por pantalla me genera un error... Aca el codigo que llevo hasta ahora... el codigo lo he tratado de hacer yo sin ayuda de ninguna pagina hasta ahora que pido me den la idea de porque me da este error y si me ayudan les agradezco...

Código
  1. include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5.  
  6. int Proceso();
  7. void Centra_Titulo();
  8. void mostrar();
  9.  
  10.  
  11. int Proceso()
  12. {
  13. int lim;
  14. int contador;
  15.   int di[100];
  16.   int df[100];
  17.  
  18.   ofstream abrir_datos;
  19.   abrir_datos.open("Transiciones.txt", ios::out|ios::app);
  20.   if(abrir_datos.fail())
  21.   {
  22.   cerr>"Error Al Crear Archivo";
  23.   cin.get();
  24. cin.get();
  25.   }
  26.   else
  27.   {
  28.  
  29. cout<<"Cuantos estados desea ingresar: ";
  30.   cin>>lim;
  31.  
  32.   for(contador=0; contador<lim; contador++)
  33.   {
  34.         cout<<"Ingrese los datos correspondientes al Estado No. "<<(contador+1)<<" ..."<<endl;
  35.         cout<<"q";cin>>di[contador];
  36.         cout<<"q";cin>>df[contador];
  37.         abrir_datos<<di[contador]<<" "<<df[contador]<<endl;
  38.  
  39.   }
  40.  
  41.  
  42.   cout<<"La expresion de transiciones es: "<<endl;
  43.   cout<<"{ ";
  44.     for(contador=0; contador<lim; contador++)
  45.   {
  46.         cout<<" q";cout<<di[contador]<<" ==>";
  47.         cout<<" q";cout<<df[contador];
  48.         if(contador<lim-1)
  49.         {
  50.         cout<<" | ";
  51.         }
  52.  
  53.   }
  54.         cout<<" }";
  55.    abrir_datos.close();
  56.    }
  57. }
  58.  
  59. void mostrar()
  60. {
  61. int lim;
  62.  
  63. int contador;
  64.   int di[100];
  65.   int df[100];
  66.  
  67.   ifstream abrir_datos;
  68.   abrir_datos.open("Transiciones.txt",ios::in|ios::app);
  69.  
  70.   abrir_datos>>di[contador];
  71.   while (!abrir_datos.eof())
  72.   {
  73.   abrir_datos>>df[contador];
  74.   for(contador=0; contador<lim; contador++)
  75.   {
  76.         cout<<" q";cout<<di[contador]<<" ==>";
  77.         cout<<" q";cout<<df[contador];
  78.         if(contador<lim-1)
  79.         {
  80.         cout<<" | ";
  81.         }
  82.  
  83.   }
  84.         cout<<" }";
  85.         abrir_datos>>di[contador];
  86.    }
  87.    abrir_datos.close();
  88.  
  89. }
  90.  
  91.  
  92.  
  93. void Centra_Titulo()
  94. {
  95.   char  titulo[100]= "Bienvenido al Programa De Automatas Deterministas" ;
  96.  
  97.   int pro = strlen(titulo);
  98.   for (int i=1; i<(40-(pro/2)); i++)
  99.   cout<<" ";
  100.   cout<<titulo;
  101. }
  102.  
  103.  
  104. int main ()
  105. {
  106.   int cantidad;
  107.   int opc;
  108.   Centra_Titulo();
  109.      cout<<endl<<endl;
  110. cout<<"1. Ingreso de Datos"<<endl;
  111. cout<<"2. Mostrar todas las Expresiones desarrolladas"<<endl;;
  112. cout<<"3. Salir"<<endl;
  113. cout<<"Que desea hacer: ";
  114.      cin>>opc;
  115.  
  116.      switch(opc)
  117.      {
  118.      case 1:
  119.      Proceso();
  120.      break;
  121.  
  122.      case 2:
  123.      mostrar();
  124.      break;
  125.      }
  126.  
  127. cin.get();
  128. cin.get();
  129. return 0;
  130. }
  131.  

Pienso que el problema es esta linea de código de la funcion "mostrar":
Código
  1.   for(contador=0; contador<lim; contador++)
  2.   {
debido a que allí no ingreso el valor de la variable "lim" como en la funcion proceso, pero igual puede que no sea allí el problema y me lo este imaginando....


PD: Estoy trabajando en Borland C++


Título: Re: Programa con Archivo ".txt" y un problema a la hora de Salida de Datos
Publicado por: BlackM4ster en 14 Noviembre 2013, 12:10 pm
Antes de hacer nada, tienes que dar valor a
Código
  1. int lim;
  2. int di[100];
  3. int df[100];

Para ello, tienes que hacer un for, que vaya leyendo lo que hay entre espacio y espacio de los archivos, y vaya almacenandolo. Un contador te ayudará a saber cuantos datos tiene que leer (lim)

Suerte


Título: Re: Programa con Archivo ".txt" y un problema a la hora de Salida de Datos
Publicado por: rir3760 en 14 Noviembre 2013, 18:39 pm
sin embargo a la hora de tratar de mostrar datos por pantalla me genera un error...
Si solo quieres mostrar las lineas en el archivo puedes utilizar la función getline. Por ejemplo:
Código
  1. void mostrar()
  2. {
  3.   ifstream abrir_datos;
  4.   char linea[4096]; // O algun otro valor apropiado
  5.  
  6.   abrir_datos.open("Transiciones.txt",ios::in|ios::app);
  7.  
  8.   while (abrir_datos.getline(linea, 4096))
  9.      cout << linea << endl;
  10.  
  11.   abrir_datos.close();
  12. }

Una forma mejor es utilizando la clase string (http://www.cplusplus.com/reference/string/string/?kw=string) y std::getline (http://www.cplusplus.com/reference/string/string/getline/?kw=getline).

Por ultimo deberías de cambiar de compilador ya que los Borland, para ser diplomático, no tienen una buena reputación.

Un saludo


Título: Re: Programa con Archivo ".txt" y un problema a la hora de Salida de Datos
Publicado por: Black Lotus en 15 Noviembre 2013, 04:11 am
Por ultimo deberías de cambiar de compilador ya que los Borland, para ser diplomático, no tienen una buena reputación.


Me recomiendas algun compilador de c++?? que tenga una buena reputación  ;D ;D


Título: Re: Programa con Archivo ".txt" y un problema a la hora de Salida de Datos
Publicado por: rir3760 en 15 Noviembre 2013, 07:06 am
Dos de calidad son g++ (parte de GCC y disponible para MS Windows y Linux) y Visual C++ de Microsoft.

Un saludo