Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   C/C++ (http://www.forosdelweb.com/f96/)
-   -   problemas con funciones (http://www.forosdelweb.com/f96/problemas-con-funciones-580844/)

nikolog 28/04/2008 12:18

problemas con funciones
 
tengo problemas con las funciones, al aser el programa sin funciones no tengo niun problema pero al momento de aser una funcion el compilador me tira errores y warning
en la funcion insertar es donde tengo el problema y nose muy bn como trabaja la funcion si alguien me pudiera explicar o arreglar esa funcion, tambien intente aser una funcion para mostrar la lista pero tampoko me funciono.
gracias



#include<stdio.h>
#include<stdlib.h>
#include<conio.h>


typedef struct nodo
{
int valor;
struct nodo *siguente;
}tiponodo;




struct nodo *crea_nodo(int);
void insertar(struct nodo *q,int x);

void main()
{

struct nodo *q,*L=NULL;
int z,x;

while(1)
{
printf("ingrese valor para lista\n");
scanf("%d",&z);
if(z==0)break;
if(L==NULL)
L=crea_nodo(z);
else{

q=L;
L=crea_nodo(z);
L->siguente=q;
}

}


q=L;

while(q != NULL)
{
printf("%d->",q->valor);
q=q->siguente;
}

getch();

printf("ingrse numero");
scanf("%d",&x);


void insertar(L, x);
}



struct nodo *crea_nodo(int z){


struct nodo *p;
p=malloc(sizeof(struct nodo));
p->valor=z;
p->siguente=NULL;

return p;}


void insertar(struct nodo *q,int x){

struct node *p=crea_nodo(x);
p->siguente=q;
q=p;}

_Dark_Hunter_ 02/05/2008 05:43

Re: problemas con funciones
 
Hola!!

En primer lugar la función para mostrar la lista la podrías hacer recursiva y muy sencillita:

void imprimir(struct nodo * l){
if (l==NULL)
printf("\n LISTA VACIA \n");
else{
printf("%d",l->valor);
imprimir(l->siguiente); /*Esto es lo más importante de esta función,se llama recursivamente al siguiente elemento de la lista*
}
}

P.D: Si cambias el orden del printf (ANTES O DESPUES de la llamada recursiva) se imprimirá en orden inverso o en orden correcto. PRUEBALO!!

_Dark_Hunter_ 02/05/2008 05:47

Re: problemas con funciones
 
Una cosa que veo que haces mal:

cuando pones p=malloc(sizeof(struct nodo));

la llamada malloc sirve para reservar memoria y se le dice el tamaño eso está bien, pero malloc te devuelve un puntero sin tipo (void) por lo que tienes que convertirlo con un cast.

p=(struct nodo *)malloc(sizeof(struct nodo));


La zona horaria es GMT -6. Ahora son las 19:53.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.