![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _nodo{
char *url;
int n;
struct _nodo *siguiente;
}TipoNodo;
typedef TipoNodo *pNodo;
typedef TipoNodo *Pila;
void Push(Pila *l,char *web);
char* Pop(Pila *l);
int main(){
Pila pila= NULL;
char t[256]; // buffer de 255 caracteres + /0
do{
printf("Introduzca la pagina web a visitar\n");
gets(t);
// t siempre apunta al buffer, por lo que siempre apilas un puntero que apunta al buffer que es la última cadena...
Push(&pila,t);
} while(strcmp(t,"salir")); // "salir" también ha sido apilada, por lo que es la última cadena y la UNICA que printf puede ver...
while(pila->siguiente!=NULL){
Pop(&pila);
printf("%d %s\n",pila->n, pila->url);
}
printf("Final presione una tecla para continuar...");
getch();
return 0;
}
void Push(Pila *pila,char *web){
pNodo nuevo;
nuevo= (pNodo)malloc(sizeof(TipoNodo));
if(*pila==0) nuevo->n=0;
else nuevo->n=(*pila)->n+1;
nuevo->url= web;
nuevo->siguiente= *pila;
*pila=nuevo;
}
char* Pop(Pila *pila){
pNodo nodo;
char *val;
nodo=*pila;
if(!nodo) return "Vacio";
*pila= nodo->siguiente;
val=nodo->url;
free(nodo);
return val;
}
Última edición por escafandra fecha: 10-04-2008 a las 19:17:32. |
|
#2
|
||||
|
||||
|
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.
![]() pues con esta forma tambien solo me imprime la ultima paguina y necesito que se impriman todos.
__________________
Novato en busqueda de Avance Última edición por ramphi fecha: 11-04-2008 a las 18:22:56. Razón: falta de especificacion |
|
#3
|
||||
|
||||
|
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. ![]() |
|
#4
|
||||
|
||||
|
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#5
|
||||
|
||||
|
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. |
|
#6
|
||||
|
||||
|
ok
en realidad estoy usando c++, intentare todo lo que me sugieren y luego les digo como me fue.
gracias por la ayuda.
__________________
Novato en busqueda de Avance Última edición por ramphi fecha: 12-04-2008 a las 23:02:04. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Estructura de un CD | david duarte | Varios | 4 | 27-10-2005 17:48:50 |
| Actualizar estructura | Garada | Firebird e Interbase | 2 | 15-10-2004 08:34:40 |
| estructura de una tabla | Salomon | Firebird e Interbase | 3 | 14-05-2004 15:26:46 |
| Averiguar estructura de frm | brandolin | MySQL | 0 | 20-10-2003 22:23:57 |
| Imprimir Estructura | agora18 | Conexión con bases de datos | 3 | 07-10-2003 19:19:22 |
|