![]() |
problema en estructura
hola gente como estan, les escribo por la siguiente duda.
Estoy realizando una estructura de datos en pila pero se me ha presentado el siguiente problema cuando inserto los valores directamente desde modo de edicion todo va bien, pero cuando utilizo una sentencia gets(). para capturar los datos por teclado con un ciclo y guardarlos el programa solo imprime el ultimo dato: y quiero que los imprima todos no solo el ultimo ahora les pongo el codigo que utilize para la estructura: Código:
#include <stdio.h> Código:
#include <stdio.h> Salu2 |
Desde mi punto de vista tienes dos errores:
1) Asumes que el resultado de gets(t), es decir t, no va a cambiar. La realidad es que si cambia, por lo que apunta siempre a la última cadena introducida por teclado. 2) El bucle del printf está mal planteado, por eso obtienes un error, como el Pop lo haces después de comprobar si pila es nulo, en el ultimo elemento pila pasa a ser cero y ejecuta el printf pila->url, siendo pila NULL => ERROR. La estructura del Push y Pop esta bien planteada. Mira este código, basado en el tuyo. Código:
#include <stdio.h> Saludos. |
otra cosa
gracias por la ayuda, pero sigo teniendo problemas en en bucle de Push cuando intento introducir un valor por teclado en el bucle me sigue dando error en esta parte
Código:
do{ esta parte del codigo dara problemas o es mi compilador de c++ que estara dando problemas... |
Claro, gets(t), utiliza t como un buffer, como lo has definido como char* t = "dentro"; apunta a la cadena dentro, de 6 caracteres. Aquí vas a guardar las cadenas que introduzcas por el teclado. Si te pasas de caracteres... ERROR en tiempo de ejecución. Por otro lado, siempre apunta a la última cadena.
Prueba esto y te darás cuenta: Código:
#include <stdio.h> |
problema en estructura
bien ya he comprendido esa parte pero entonces, como puedo hacer para que no se pierdan los valores introducidos y puedan ser impresos al final.:confused:
pues con esta forma tambien solo me imprime la ultima paguina y necesito que se impriman todos. |
Pues tienes dos formas. O reservas espacio para las cadenas url en la estructura url[256] o lo asignas dinámicamente y lo liberas al desapilar.
Por supuento, entonces, el almacenaje de las cadenas lo harás con un strcpy, y no con una asignación de puntero. Si en lugar de usar C, usas C++ es mas fácil el uso de los operadores new y delete. Saludos. ;) |
OFFTOPIC: En Delphi (y por tanto también en C++) existen clases que implementan las pilas (FIFO) y colas (LIFO), de memoria creo recordar:
TStackqueue Tqueue y sé que hay algunas más, en la ayuda o en la unidad classes estarán. Si tienes que implementarlo tú, pues ajo y agua ;). Saludos |
Me da la impresión de que tiene que implementarlo él, además, esta usando C y no C++ (por la forma de asignar memoria...), si es así, no puede usar las VCL.
Saludos. |
ok
en realidad estoy usando c++, intentare todo lo que me sugieren y luego les digo como me fue.
gracias por la ayuda. |
La franja horaria es GMT +2. Ahora son las 12:18:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi