Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con un trabajo

Estas en el tema de problema con un trabajo en el foro de C/C++ en Foros del Web. Hola gente, mi problema es que en un programa con listas que estoy haciendo, es que cada vez que inserto una linea o muestro el ...
  #1 (permalink)  
Antiguo 24/10/2015, 11:24
 
Fecha de Ingreso: abril-2015
Mensajes: 16
Antigüedad: 9 años
Puntos: 0
problema con un trabajo

Hola gente,

mi problema es que en un programa con listas que estoy haciendo, es que cada vez que inserto una linea o muestro el texto lo hace pero como que despues borra lo anterior.

por ejemplo yo pongo:

insertarlinea(a,hola,1) (lo hace)

mostrartexto (a)(lo hace)

1 - hola

pero despues si pongo otra vez mostrar texto me dice archivo vacio

si me pudieran ayudar les agradeceria.
  #2 (permalink)  
Antiguo 24/10/2015, 11:26
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: problema con un trabajo

Pon el código para que podamos ayudarte.
  #3 (permalink)  
Antiguo 24/10/2015, 11:33
 
Fecha de Ingreso: abril-2015
Mensajes: 16
Antigüedad: 9 años
Puntos: 0
Respuesta: problema con un trabajo

Código C++:
Ver original
  1. // el main
  2. int main()
  3. {
  4.     comando c;
  5.     Archivo a;
  6.     char nroli[2];
  7.     int nrolinea;
  8.  
  9.     do
  10.     {
  11.         c=leerComando(c);
  12.  
  13.         switch(c.cmdNum)
  14.         {
  15.             case 1: a=CrearArchivo(c.parametro1);
  16.                     break;
  17.             case 2: cout << "BorrarArchivo";
  18.                     break;
  19.             case 3:
  20.                     cout << "InsertarLinea";
  21.                     break;
  22.             case 4: cout << "BorrarLinea";
  23.                     break;
  24.             case 5: mostrartexto(a);
  25.                     break;
  26.             case 6: a=insertarpri(a,c.parametro2);
  27.                     break;
  28.             case 7: cout << endl <<"Saldra del Programa."<< endl;
  29.                     c.cmdNum=7;
  30.                     break;
  31.             default: cout << " El comando ingresado es incorrecto." << endl;
  32.  
  33.         }getchar();
  34.  
  35.     }while(c.cmdNum!=7);
  36.  
  37. }
  38.  
  39.  
  40. //otro cpp
  41. #include <iostream>
  42. #include <stdlib.h>
  43. #include <stdio.h>
  44. #include <string.h>
  45. #include "Cabezales.h"
  46.  
  47. using namespace std;
  48.  
  49. comando leerComando(comando c)
  50. {
  51.     char *p;
  52.     char coman[20];
  53.  
  54.     system("clear");
  55.  
  56.     cout <<">";
  57.     cin >> coman;
  58. //    gets(coman);
  59.  
  60.     p = strtok(coman, "()");
  61.     strcpy(c.cmd, p);
  62.  
  63.  
  64.     if(strcmp(c.cmd, "CrearArchivo")==0)
  65.     {
  66.         c.cmdNum=1;
  67.         p = strtok(NULL, "()");
  68.         strcpy(c.parametro1, p);
  69.     }
  70.     else
  71.     {
  72.         if(strcmp(c.cmd, "BorrarArchivo")==0)
  73.         {
  74.             c.cmdNum=2;
  75.             p = strtok(NULL, "()");
  76.             strcpy(c.parametro1, p);
  77.         }
  78.         else
  79.         {
  80.             if(strcmp(c.cmd, "InsertarLinea")==0)
  81.             {
  82.                 c.cmdNum=3;
  83.                 p = strtok(NULL, "(,,,)");
  84.                 strcpy(c.parametro1, p);
  85.                 p = strtok(NULL, "(,,,)");
  86.                 strcpy(c.parametro2, p);
  87.                 p = strtok(NULL, "(,,,)");
  88.                 strcpy(c.parametro3, p);
  89.             }
  90.             else
  91.             {
  92.                 if(strcmp(c.cmd, "BorrarLinea")==0)
  93.                 {
  94.                     c.cmdNum=4;
  95.                     p = strtok(NULL, "(,,,)");
  96.                     strcpy(c.parametro1, p);
  97.                     p = strtok(NULL, "(,,,)");
  98.                     strcpy(c.parametro3, p);
  99.                 }
  100.                 else
  101.                 {
  102.                     if(strcmp(c.cmd, "MostrarTexto")==0)
  103.                     {
  104.                         c.cmdNum=5;
  105.                         p = strtok(NULL, "(,)");
  106.                         strcpy(c.parametro1, p);
  107.                        /* p = strtok(NULL, "(,)");
  108.                         strcpy(c.parametro2, p);*/
  109.                     }
  110.                     else
  111.                     {
  112.                         if(strcmp(c.cmd, "insertarpri")==0)
  113.                         {
  114.                             c.cmdNum=6;
  115.                             p = strtok(NULL, "(,,)");
  116.                             strcpy(c.parametro1, p);
  117.                             p = strtok(NULL, "(,,)");
  118.                             strcpy(c.parametro2, p);
  119.                            /* p = strtok(NULL, "(,)");
  120.                             strcpy(c.parametro2, p);*/
  121.                         }
  122.                         else
  123.                         {
  124.                             if(strcmp(c.cmd, "Fin")==0)
  125.                             {
  126.                             c.cmdNum=7;
  127.                             }
  128.                             else
  129.                             {
  130.                                 cout << "Error";
  131.                                 getchar();
  132.                             }
  133.                         }
  134.                     }
  135.                 }
  136.             }
  137.         }
  138.     }
  139.  
  140. return c;
  141. }
  142.  
  143.  
  144. Archivo CrearArchivo(char nombre[100])
  145. {
  146.     Archivo a;
  147.     a= new archivo;
  148.     strcpy(a->nombre,nombre);
  149.     a->sig_archivo=NULL;
  150.     a->ptr_linea= new nodolinea;
  151.     a->ptr_linea=NULL;
  152.     cout << "Archivo " << a->nombre << " creado.";
  153.     getchar();
  154.     return a;
  155. }
  156.  
  157. Archivo insertarpri(Archivo a,char line[100])
  158. {
  159.     Archivo recorro;
  160.     recorro=a;
  161.  
  162.     Linea nuevalinea;
  163.     nuevalinea= new nodolinea;
  164.     strcpy(nuevalinea->line,line);
  165.     nuevalinea->sig_linea=NULL;
  166.     recorro->ptr_linea=nuevalinea;
  167.  
  168.     return recorro;
  169. }
  170.  
  171. void mostrartexto(Archivo a)
  172. {
  173.     int x=1;
  174.     Archivo recorro;
  175.     recorro =a;
  176.  
  177.     if(recorro->ptr_linea!=NULL)
  178.     {
  179.         cout << "-Archivo " << recorro->nombre <<"-"<< endl;
  180.  
  181.         while(recorro->ptr_linea != NULL)
  182.         {
  183.             cout << x << " - " << recorro->ptr_linea->line;
  184.             recorro->ptr_linea=(*recorro).ptr_linea->sig_linea;
  185.         }
  186.         getchar();
  187.     }
  188.     else
  189.     {
  190.         cout << "Archivo vacio.";
  191.         getchar();
  192.     }
  193.  
  194. }
  195.  
  196. //y el head
  197.  
  198. #ifndef CABEZALES_H_INCLUDED
  199. #define CABEZALES_H_INCLUDED
  200.  
  201. enum retorno
  202. {
  203.     OK,ERROR,NO_IMPLEMENTADA
  204. };
  205. typedef enum retorno TipoRet;
  206.  
  207. struct comando
  208. {
  209.     char cmd[30], parametro1[30], parametro2[30], parametro3[2];
  210.     int cmdNum;
  211. };
  212.  
  213. struct nodolinea
  214. {
  215.     int nrolinea;
  216.     char line[100];
  217.     struct nodolinea * sig_linea;
  218.  
  219. }; typedef nodolinea * Linea;
  220.  
  221.  
  222. struct archivo
  223. {
  224.     char nombre[100];
  225.     Linea ptr_linea;
  226.     struct archivo * sig_archivo;
  227.  
  228. }; typedef archivo *Archivo;
  229.  
  230. comando leerComando(comando c);
  231.  
  232. int cantidad_lineas(Archivo a);
  233.  
  234. Archivo CrearArchivo(char nombre[100]);
  235. Archivo insertarlinea(Archivo a, char line[100], int nrolinea);
  236. Archivo borrarlinea (Archivo a, int nrolinea);
  237. Archivo borrararchivo(Archivo a, char nombre[100]);
  238. void mostrartexto(Archivo a);
  239.  
  240.  
  241.  
  242. #endif // CABEZALES_H_INCLUDED
  #4 (permalink)  
Antiguo 24/10/2015, 11:49
 
Fecha de Ingreso: abril-2015
Mensajes: 16
Antigüedad: 9 años
Puntos: 0
Respuesta: problema con un trabajo

lo que pense es que capaz que cada vez que hace el do while del main el archivo vuelve a null pero no lo tendria que hacer
  #5 (permalink)  
Antiguo 26/10/2015, 04:08
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: problema con un trabajo

Código C++:
Ver original
  1. Archivo insertarpri(Archivo a,char line[100])
  2. {
  3.     Archivo recorro;
  4.     recorro=a;
  5.  
  6.     Linea nuevalinea;
  7.     nuevalinea= new nodolinea;
  8.     strcpy(nuevalinea->line,line);
  9.     nuevalinea->sig_linea=NULL; // <<--- ¿Por que?
  10.     recorro->ptr_linea=nuevalinea;
  11.  
  12.     return recorro;
  13. }

Si estás añadiendo una línea al principio... por qué indicas que esa línea no tiene una siguiente? Lo que pones es correcto únicamente si el archivo está vacío, pero si no lo está entonces... te pasa justamente lo que comentas.

Un saludo

Etiquetas: listas, programa, trabajo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:46.