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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación General / Como usar un panel en un form como contenedor para otros form en C# en: 26 Mayo 2022, 12:21 pm
Hola!

he conseguido encontrar la forma de como en un panel dentro del form principal, ir abriendo otros form, manteniendo la estructura de botones del form principal, y sobre todo que se abra de forma mas realista, que si se abriera por cada form una ventana y se cerrara la otra.
El problema que me encuentro es que solo abre un nivel inferior de forms desde el form principal. Me explico, si desde el form princpila cargamos el form de Login, y una vez autenticado entra a otro form con diferentes opciones segun el perfil del usuario, a ese ultimo form del usuario, el metodo que tengo no funciona. Ya he probado desde el form de Login, llamar al panel del form principal, para modificarlo en el metodo que pasare a continuacion, pero me da error de acceso protegido, aunque haya puesto el panel del form principal la propiedad modifiers a public. Tambien he probado desde el form Login ha crear una instancia del form principal y asi llamar al metodo de abrir otro form en el panel, pero no entra bien en el metodo y no realiza nada. No se si os ocurrira alguna solucion?.Pego codigo del metodo:

Código:
    //Metodo para abrir formularios dentro del panelContenedor
        public void AbrirFormulario<MiForm>() where MiForm : Form, new()
        {
            Form formulario;
            formulario = panelFormularios.Controls.OfType<MiForm>().FirstOrDefault();//Busca en la colecion el formulario
            //si el formulario/instancia no existe
            if (formulario == null)
            {
               
                formulario = new MiForm();
                formulario.TopLevel = false;
                formulario.FormBorderStyle = FormBorderStyle.None;
                formulario.Dock = DockStyle.Fill;
                panelFormularios.Controls.Add(formulario);
                panelFormularios.Tag = formulario;
                formulario.Show();
                formulario.BringToFront();
               
            }
            //si el formulario/instancia existe
            else
            {
                formulario.BringToFront();
            }
        }


y una de las prueba que he realizado de las que he comentado antes, es definir ese metodo en el formulario de login y llamar al panel contenedor asi: formPrincipal.panelContenedor.
Per da error de estar protegido. Ademas me parece que a nivel de seguridad, por encapsulación no seria lo correcto.
La otra forma como explicaba es llamar a la funcion del form principal de form: formPrincipal.AbrirFormulario<formogin>() . Pero no entraba en el metodo al ejecturar la aplicacion.

Bueno muchas gracias de antemano por la ayuda!, saludos
2  Programación / Programación C/C++ / Re: Ayuda con implementacion algoritmo warshall en C en: 19 Mayo 2022, 00:57 am
Ok! comprendido!, estaba pensando si era por eso, si era por que va en una dirección.

Ok muchas gracias por todo!
3  Programación / Programación C/C++ / Re: Ayuda con implementacion algoritmo warshall en C en: 18 Mayo 2022, 01:50 am
Hola de nuevo,

porque en lo que me piden en este ejercicio es comprobar que no existen ciudades aisladas o ciudades inalcanzables partiendo desde otra ciudad, y viendo a simple vista el fichero de texto, todas las ciudades estan conectadas. Entonces entiendo que deberia dar todo 1 el resultado del algoritmo no?

Gracias de nuevo!
4  Programación / Programación C/C++ / Re: Ayuda con implementacion algoritmo warshall en C en: 18 Mayo 2022, 01:02 am
Hola!,

he sacado un hueco para implementarlo, que voy a tope.

Y me sale este resultado:
0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1
0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 1 1
0 0 0 0 0 0 0 1 1 1 0 1 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Yo entiendo que todas las ciudades al final están conectadas unas con otras, no?. Osea desde Coruña puedes ir a Cadiz a través de las otras ciudades. Entonces no entiendo como la ultima fila da todo 0,s. Entiendo que la ultima fila es la de Cadiz en relación con las otras ciudades?. En ese caso llegando por Sevilla, hay conexión previa con las otras ciudades. No se si estaré entendiendo bien la interpretación del resultado :rolleyes:

Ahora eso si, la funcion buscar indices no se si la tengo muy afinada, porque solo me ha corrido el programa, declarando punteros como paso de variables. Adjunto el codigo:

Código
  1. #define MAX_NOMBRE_CIUDAD 40
  2. #define NUM_CIUDADES 17
  3.  
  4. int buscarIndice(char *ciudad, char *ciudades[NUM_CIUDADES], int numCiudades)
  5. {
  6.    for(int i=0; i<numCiudades; i++)
  7.    {
  8.        if(strcmp(ciudad,ciudades[i])==0)return i;
  9.    }
  10. }
  11.  
  12. void warshall(int A[][NUM_CIUDADES], int nNodos)
  13. {
  14.    int i,j,k;
  15.  
  16.    for (k = 0; k < nNodos; k++)
  17.        for (i = 0; i < nNodos; i++)
  18.            for (j=0; j< nNodos; j++)
  19.                A[i][j] = A[i][j] || A[i][k] && A[k][j];
  20.  
  21. }
  22.  
  23. int main()
  24. {
  25.    char *ciudades[NUM_CIUDADES] = {"Corunya", "Vigo", "Valladolid", "Bilbao", "Madrid", "Oviedo", "Zaragoza", "Barcelona", "Gerona", "Valencia", "Badajoz", "Jaen", "Albacete", "Murcia", "Granada", "Sevilla", "Cadiz"};
  26.    int matriz_entrada[NUM_CIUDADES][NUM_CIUDADES] = {0};
  27.  
  28.    char ciudad_origen[MAX_NOMBRE_CIUDAD];
  29.    char ciudad_destino[MAX_NOMBRE_CIUDAD];
  30.    int distancia;
  31.  
  32.    FILE *fichero = fopen("carreteras.txt", "r");
  33.    if(!fichero)   // Lo mismo que decir: fichero == NULL
  34.    {
  35.        printf("El fichero no ha podido abrirse\n");
  36.        exit(1);
  37.    }
  38.  
  39.    while(fscanf(fichero, "%s %s %d", ciudad_origen, ciudad_destino, &distancia) == 3)  
  40.    {
  41.        printf("La distancia para ir de [%s] a [%s] es: %d\n", ciudad_origen, ciudad_destino, distancia);
  42.  
  43.        int indice_origen = buscarIndice(ciudad_origen, ciudades, NUM_CIUDADES);
  44.        int indice_destino = buscarIndice(ciudad_destino, ciudades, NUM_CIUDADES);
  45.        if(indice_origen != -1 && indice_destino != -1)
  46.            matriz_entrada[indice_origen][indice_destino] = 1;
  47.    }
  48.  
  49.    warshall(matriz_entrada, NUM_CIUDADES);
  50.  
  51.    for(int i = 0; i < NUM_CIUDADES; ++i)
  52.    {
  53.        for(int j = 0; j < NUM_CIUDADES; ++j)
  54.            printf("%d ", matriz_entrada[i][j]);
  55.        printf("\n");
  56.    }
  57.  
  58.  
  59.    return 0;
  60. }
  61.  
  62.  

Muchas gracias de nuevo por la aclaración!
5  Programación / Programación C/C++ / Re: Ayuda con implementacion algoritmo warshall en C en: 14 Mayo 2022, 18:01 pm
Muchisimas gracias! ;-)

Lo voy probando en estos dias, a ver si lo consigo dejar correctamente hecho!

Saludos!
6  Programación / Programación C/C++ / Re: Ayuda con implementacion algoritmo warshall en C en: 13 Mayo 2022, 00:04 am
Hola!,

perdona no vi tu ultimo mensaje en el otro tema  :-(

casualmente mientras me escribias este ultimo mensaje, estaba implementandolo con estructuras como sugerias en el otro tema. Y ya llama bien a al metodo warshall, pero creo devuelve mal los valores. Es que no me aclaro mucho con el metodo. Lo he tenido que modificar, porque si le implementaba tal como estaba, como le puedo asignar a una matriz de tipo bool, una matriz de tipo int que es donde van concatenadas las ciudades asignadas por una numeracion?. A mi me da como resultado la tabla con todos 1, supongo que no esta bien.

En la tabla que compartes, el 0 es la ciudad actual, el -1 una ciudad inalcanzable, el 1 supongo que sera una ciudad alcanzable, pero los valores 4, 5 y 6 que aparecen en la tabla que significan.

Pego el nuevo codigo por si esta muy mal lo repito, y si solo hay que retocarlo un poco lo del metodo warshall que la verdad es voy perdido como funciona, solo modifico ese metodo:

En parte ya estaban las correciones que me has comentado, revisare las otras que no estan realizadas. Pego el codigo. Muchas gracias!

Código
  1. struct ciudades
  2. {
  3.    char ciudad1 [maxCiudad];
  4.    char ciudad2 [maxCiudad];
  5.    int distancia;
  6. };
  7.  
  8. /*void mas_corto(unsigned int c[][], unsigned int a[][], int P[][], unsigned int nNodos)
  9. {
  10.     int i,j,k;
  11.     for (i = 0; i < nNodos; i++)
  12.     {
  13.             for(j=0; j < nNodos; j++)
  14.             {
  15.                 // Inicializamos con el coste de los caminos directos
  16.                 A[i][j] = C[i][j]; P[i][j] = -1;
  17.             }
  18.     }
  19.     for (k = 0; k < nNodos; k++)
  20.         for (i = 0; i < nNodos; i++)
  21.             for (j=0; j< nNodos; j++)
  22.                 if (A[i][k]+A[k][j] < A[i][j])
  23.                 {
  24.                     A[i][j] = A[i][k] + A[k][j];
  25.                     P[i][j] = k;
  26.                 }
  27. } */
  28.  
  29. int contar_filas(int *filas)
  30. {
  31.    FILE *fichero;
  32.    char linea[maxLinea];
  33.    char * campo;
  34.  
  35.    fichero= fopen( "carreteras.txt", "r");
  36.    if(fichero==NULL)
  37.    {
  38.        printf("No se ha podido abrir el fichero.\n");
  39.        exit(1);
  40.    }
  41.    else
  42.    {
  43.        while(fgets(linea,maxLinea,fichero))
  44.        {
  45.            (*filas)++;
  46.        }
  47.    }
  48.    fclose(fichero);
  49.    return (*filas);
  50. }
  51.  
  52. void warshall (int **A, unsigned int nNodos)
  53. {
  54.    int i,j,k;
  55.  
  56.    for (k = 0; k < nNodos; k++)
  57.        for (i = 0; i < nNodos; i++)
  58.            for (j=0; j< nNodos; j++)
  59.                A[i][j] = A[i][j] || A[i][k] && A[k][j]; //Si hay un camino de ‘i’ a ‘j’ o si hay //un camino de ‘i’ a ‘j’ pasando por ‘k’
  60.  
  61.    for (int i=0; i<nNodos; i++)
  62.    {
  63.        for (int j=0; j<nNodos; j++)
  64.            printf("%d ",A[i][j]);
  65.        printf("\n");
  66.    }
  67. }
  68.  
  69. int main()
  70. {
  71.    FILE *fichero;
  72.    struct  ciudades *city;
  73.    int *filas=0, *columnas=0, clave=1;
  74.    int cont=0, rows;
  75.    char ciudad1[maxCiudad];
  76.    char ciudad2[maxCiudad];
  77.    char distancia[maxCiudad];
  78.    int **claves;
  79.  
  80.    fichero= fopen( "carreteras.txt", "r");
  81.    if(fichero==NULL)
  82.    {
  83.        printf("No se ha podido abrir el fichero.\n");
  84.        exit(1);
  85.    }
  86.    else
  87.    {
  88.        filas=contar_filas(&filas);
  89.        rows=filas;
  90.  
  91.        city=malloc(rows*sizeof(struct ciudades));
  92.        claves=malloc(rows*sizeof(int*));
  93.        for(int i=0; i<rows; i++)
  94.        {
  95.            claves[i]=malloc(2*sizeof(int));
  96.        }
  97.  
  98.        // se lee cada fila de todo el fichero de elementos
  99.        while(fscanf(fichero, "%s %s %s", ciudad1, ciudad2, distancia) == 3)
  100.        {
  101.            strcpy(city[cont].ciudad1,ciudad1);
  102.            strcpy(city[cont].ciudad2,ciudad2);
  103.            city[cont].distancia=ciudad2;
  104.            cont++;
  105.        }
  106.    }
  107.  
  108.    for(int i=0; i<rows; i++)
  109.    {
  110.        for(int j=0; j<2; j++)
  111.        {
  112.  
  113.            if(strcmp(city[i].ciudad1,"Corunya")==0)
  114.                claves[i][j]=1;
  115.            if(strcmp(city[i].ciudad2,"Corunya")==0)
  116.                claves[i][j]=1;
  117.  
  118.            if(strcmp(city[i].ciudad1,"Vigo")==0)
  119.                claves[i][j]=2;
  120.            if(strcmp(city[i].ciudad2,"Vigo")==0)
  121.                claves[i][j]=2;
  122.  
  123.            if(strcmp(city[i].ciudad1,"Valladolid")==0)
  124.                claves[i][j]=3;
  125.            if(strcmp(city[i].ciudad2,"Valladolid")==0)
  126.                claves[i][j]=3;
  127.  
  128.            if(strcmp(city[i].ciudad1,"Bilbao")==0)
  129.                claves[i][j]=4;
  130.            if(strcmp(city[i].ciudad2,"Bilbao")==0)
  131.                claves[i][j]=4;
  132.  
  133.            if(strcmp(city[i].ciudad1,"Madrid")==0)
  134.                claves[i][j]=5;
  135.            if(strcmp(city[i].ciudad2,"Madrid")==0)
  136.                claves[i][j]=5;
  137.  
  138.            if(strcmp(city[i].ciudad1,"Zaragoza")==0)
  139.                claves[i][j]=7;
  140.            if(strcmp(city[i].ciudad2,"Zaragoza")==0)
  141.                claves[i][j]=7;
  142.  
  143.            if(strcmp(city[i].ciudad1,"Barcelona")==0)
  144.                claves[i][j]=8;
  145.            if(strcmp(city[i].ciudad2,"Barcelona")==0)
  146.                claves[i][j]=8;
  147.  
  148.            if(strcmp(city[i].ciudad1,"Gerona")==0)
  149.                claves[i][j]=9;
  150.            if(strcmp(city[i].ciudad2,"Gerona")==0)
  151.                claves[i][j]=9;
  152.            if(strcmp(city[i].ciudad1,"Valencia")==0)
  153.                claves[i][j]=10;
  154.            if(strcmp(city[i].ciudad2,"Valencia")==0)
  155.                claves[i][j]=10;
  156.  
  157.            if(strcmp(city[i].ciudad1,"Badajoz")==0)
  158.                claves[i][j]=11;
  159.            if(strcmp(city[i].ciudad2,"Badajoz")==0)
  160.                claves[i][j]=11;
  161.  
  162.            if(strcmp(city[i].ciudad1,"Jaen")==0)
  163.                claves[i][j]=12;
  164.            if(strcmp(city[i].ciudad2,"Jaen")==0)
  165.                claves[i][j]=12;
  166.  
  167.            if(strcmp(city[i].ciudad1,"Albacete")==0)
  168.                claves[i][j]=13;
  169.            if(strcmp(city[i].ciudad2,"Albacete")==0)
  170.                claves[i][j]=13;
  171.  
  172.            if(strcmp(city[i].ciudad1,"Murcia")==0)
  173.                claves[i][j]=14;
  174.            if(strcmp(city[i].ciudad2,"Murcia")==0)
  175.                claves[i][j]=14;
  176.  
  177.            if(strcmp(city[i].ciudad1,"Granada")==0)
  178.                claves[i][j]=15;
  179.            if(strcmp(city[i].ciudad2,"Granada")==0)
  180.                claves[i][j]=15;
  181.  
  182.            if(strcmp(city[i].ciudad1,"Sevilla")==0)
  183.                claves[i][j]=16;
  184.            if(strcmp(city[i].ciudad2,"Sevilla")==0)
  185.                claves[i][j]=16;
  186.  
  187.            if(strcmp(city[i].ciudad1,"Cadiz")==0)
  188.                claves[i][j]=17;
  189.            if(strcmp(city[i].ciudad2,"Cadiz")==0)
  190.                claves[i][j]=17;
  191.        }
  192.    }
  193.  
  194.    warshall(claves,n_Nodos);
  195.  
  196.    return 0;
  197. }
  198.  

Y el resultado que muestra por pantalla:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
7  Programación / Programación C/C++ / Re: Ayuda con implementacion algoritmo warshall en C en: 12 Mayo 2022, 14:27 pm
Vale, gracias:

Corunya Vigo 171
Corunya Valladolid 455
Vigo Valladolid 356
Valladolid Bilbao 280
Valladolid Madrid 193
Oviedo Bilbao 304
Bilbao Madrid 395
Bilbao Zaragoza 324
Madrid Zaragoza 325
Zaragoza Barcelona 296
Barcelona Gerona 100
Valencia Barcelona 349
Madrid Badajoz 403
Madrid Jaen 335
Madrid Albacete 251
Albacete Valencia 191
Albacete Murcia 150
Murcia Granada 284
Murcia Valencia 241
Granada Jaen 99
Granada Sevilla 256
Jaen Sevilla 242
Sevilla Cadiz 125
8  Programación / Programación C/C++ / Ayuda con implementacion algoritmo warshall en C en: 12 Mayo 2022, 11:56 am
Hola,



necesito ayuda para implementar el algoritmo warshall, que ira recogiendo varias filas con dos ciudades, que se suponen que entre todas las ciudades hay conexion pasando a traves de otras. Entonces se busca con este algoritmo que vaya indicando si en cada fila devuelva true o false segun vaya recorriendo las filas. Yo al menos he entendido asi el problema.

El primer problema que tengo es que, no consigo crear la matriz dinamica para guardar las ciudades en cada fila de la matriz, al leer de nuevo el fichero de texto se cuelga el programa, y no veo la razon. Vereis que he puesto varios printf(variable), para ver donde se quedaba colgado el programa, y muestra por pantalla el numero de filas.
Y despues lo que no se es, en que tipo de variable debo recoger los resultados? en una matriz de tipo int?, y si es asi luego es ir recorriendo la matriz viendo cuantos 1, obtiene?y como discernir que por el numero de 1 que devuelve el algoritmo, no hay ninguna ciudad aislada?. Como imaginareis es un ejercicio que me han puesto, y estoy bloqueado desde hace dias haciendo pruebas. Pego el codigo:

Código
  1. void warshall (bool *c, bool *a, unsigned int nNodos)
  2. {
  3.    int i,j,k;
  4.    for (i = 0; i < nNodos; i++)
  5.        for (j=0; j< nNodos; j++)
  6.            //A[i][j] = C[i][j];
  7.            a[(i*nNodos)+j] = c[(i*nNodos)+j];
  8.  
  9.    for (k = 0; k < nNodos; k++)
  10.        for (i = 0; i < nNodos; i++)
  11.            for (j=0; j< nNodos; j++)
  12.                //A[i][j] = A[i][j] || A[i][k] && A[k][j]; //Si hay un camino de ‘i’ a ‘j’ o si hay //un camino de ‘i’ a ‘j’ pasando por ‘k’
  13.                a[(i*nNodos)+j] = a[(i*nNodos)+j] || a[(i*nNodos)+k] && a[(k*nNodos)+j]; //Si hay un camino de ‘i’ a ‘j’ o si hay //un camino de ‘i’ a ‘j’ pasando por ‘k’
  14. }
  15.  
  16.  
  17. int main()
  18. {
  19.    FILE *fichero;
  20.  
  21.    bool *a;
  22.    bool *test;
  23.    int n_Nodos=19;
  24.    char * campo;
  25.    char ** datos;
  26.    int filas=0;
  27.    int MaxLinea=maxLinea;
  28.    char lineaFinal[maxLinea];
  29.    char ciudad1[maxCiudad];
  30.    char ciudad2[maxCiudad];
  31.    char distancia[maxCiudad];
  32.    char linea[maxLinea];
  33.  
  34.  
  35.    fichero= fopen( "carreteras.txt", "r");
  36.    if(fichero==NULL)
  37.    {
  38.        printf("No se ha podido abrir el fichero.\n");
  39.        exit(1);
  40.    }
  41.  
  42.    else
  43.    {
  44.  
  45.        while(fgets(linea,MaxLinea,fichero))
  46.        {
  47.            filas++;
  48.        }
  49.  
  50.        printf("%d\n",filas);
  51.  
  52.        fichero= fopen( "carreteras.txt", "r");
  53.        datos=malloc(sizeof(char*)*filas);
  54.        datos=malloc(sizeof(char)*3);
  55.  
  56.        // se lee cada fila de todo el fichero de elementos
  57.        while(fscanf(fichero, "%s %s %s", ciudad1, ciudad2, distancia) == 3)
  58.        {
  59.            datos[filas][0]=ciudad1;
  60.            printf("El valor de la linea %s \n", ciudad1);
  61.  
  62.            datos[filas][1]=ciudad2;
  63.            printf("El valor de la linea %s \n", ciudad2);
  64.  
  65.            datos[filas][2]=distancia;
  66.            printf("El valor de la linea %s \n", distancia);
  67.  
  68.        }
  69.    }
  70.    getchar();
  71.  
  72.    a = (bool *)malloc(sizeof(bool)*(n_Nodos * n_Nodos));
  73.    // aqui no tengo claro si se recoge asi los resultados del algoritmo
  74.    int resul[filas][3]=warshall (a,datos,n_Nodos);
  75.  
  76.  
  77.    return 0;
  78. }
  79.  

Muchas gracias por la ayuda!
9  Programación / Programación C/C++ / Re: Ayuda con fichero y cadenas en C en: 5 Mayo 2022, 14:18 pm
Gracias!,

struct, pero lo tengo que pasar despues a una matriz porque es para pasarle los datos al algoritmo warshall y vea si no hay conexiones entre ciudades.

Gracias por la idea!
10  Programación / Programación C/C++ / Ayuda con fichero y cadenas en C en: 4 Mayo 2022, 19:49 pm
Hola,

agradeceria si me podeis ayudar, estoy con un programilla que lee desde un fichero varias lineas donde hay el nombre de una ciudad, un espacio, el nombre de otra ciudad, otro espacio y los kilometros entre ellas. El problema es que no consigo que tras leer una de las lineas en la variable linea, pasarsela a una array de cadenas para despues con un par de bucles for ir rellenando una matriz dinamica. No se si estoy planteando  bien el copiar directamente la linea al array, o el problema esta en que debo poner \0 al final de la linea. Yo he impreso printf("%s\n", linea); dentro del bucle while e imprime bien cada linea, pero al compilar se abre el prompt y finaliza el programa sin mostrar nada por pantalla.

Pego el codigo por si me podeis ayudar. Gracias:
Código
  1. char * campo;
  2.    char ** datos;
  3.    int filas=0;
  4.    int MaxLinea=maxLinea;
  5.    char lineaFinal[maxLinea];
  6.    char linea[maxLinea];
  7.    datos=malloc(sizeof(char*)*1);
  8.    datos=malloc(sizeof(char)*3);
  9.  
  10.    // se lee cada fila de todo el fichero de elementos
  11.    while(fgets(linea,MaxLinea,fichero) >0 )
  12.    {
  13.            strcpy(lineaFinal[filas],linea);
  14.            filas++;
  15.            datos=realloc(datos,sizeof(char*)*filas);
  16.    }
  17.  
  18.    for(int i=0; i<filas; i++)
  19.    {
  20.        datos=realloc (datos,sizeof(char)*3);
  21.    }
  22.  
  23.    for(int i=0; i<filas; i++)
  24.    {
  25.        for(int j=0; j<3; j++)
  26.  
  27.        {
  28.            campo = strtok(lineaFinal[filas], " ");
  29.            datos[i][j]=campo;
  30.            campo=strtok(NULL," ");
  31.            datos[i][j]=campo;
  32.            campo=strtok(NULL," ");
  33.            datos[i][j]=campo
  34.        }
  35.    }
  36.  

MOD: El código debe ir entre etiquetas de Código GeSHi
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines