C/Visual C - Por que no me funciona esta codigo ???

 
Vista:

Por que no me funciona esta codigo ???

Publicado por aproblemada (1 intervención) el 30/10/2005 23:18:18
Amigos debo desarrollar una tarea con arboles y para ello he debido agregar a una
estructura un campo que guarde una cadena de caracteres, pero no lo he podido
solucionar que puede estar pasando ??

Especificamente el problema es con el campo diag que esta denido como un
arreglo de 4,pero a diferencia del campo Dato este me da problema a la hora
de insertar un nuevo nodo

Aqui va el codigo que estoy corriendo en el compliador dev-c++4.9.9.2

Muchisimas gracias por cualquier ayuda

#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <stdio.h>
#include <alloc.h>
#include <process.h>

struct Arbol{

char Dato;
char diag[4];
struct Arbol *Izq;
struct Arbol *Der;
};

void Menu(void);
void error(void);
void InsertarNodo (struct Arbol **,char,char);
void PreOrden (struct Arbol *Raiz);
enum{insertar=1,buscar,imprime,inorden,postorden,preorden,salir};

int main(void)

{
char vdiag[4];
char dato;
int opcion;
struct Arbol *Raiz=NULL;
Menu();
scanf("%d",&opcion);
while(opcion!=salir){
switch(opcion){
case insertar: printf("Introduce un caracter: ");
scanf("\n%c",&dato);
printf("Introduce cuatro caracteres : ");
scanf("\n%s",&vdiag);
InsertarNodo(&Raiz,dato,vdiag);
break;
case preorden: printf("En preorden es:\n");
PreOrden(Raiz);
getch();
break;
printf("Opcion Incorrecta.");
getch();
Menu();
break;
}
Menu();
scanf("%d",&opcion);
}
printf("Fin de %s",__FILE__);
system("cls");
return 0;
}

void error(void)
{
perror("error: no hay memoria suficiente.");
getch();
abort();
}

void PreOrden(struct Arbol *Raiz)
{
if(!Raiz) return;
if(Raiz->Dato)
printf("%c-> ",Raiz->Dato);
printf("%s-> ",Raiz->diag);
PreOrden(Raiz->Izq);
PreOrden(Raiz->Der);
}

void InsertarNodo(struct Arbol **Raiz,char valor, char rdiag)
{

if(*Raiz==NULL){
*Raiz=(struct Arbol *)malloc(sizeof(struct Arbol));
if(*Raiz!=NULL){
(*Raiz)->Dato=valor;
(*Raiz)->diag=rdiag;
(*Raiz)->Izq=NULL;
(*Raiz)->Der=NULL;
}
else{
printf("%c no insertado.\n",valor);
error();
}
}
else if(valor<(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Izq),valor,rdiag);
else if(valor>(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Der),valor,rdiag);
else printf("Dato duplicado.\n");
}

void Menu(void)
{
system("cls");
printf("Escoja su opcion:");
printf("1. Insertar.");
printf("6. Preorden.");
printf("7. Salir.");
printf("-> ");
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Por que no me funciona esta codigo ???

Publicado por VoidPointer (180 intervenciones) el 31/10/2005 01:26:51
le estas asignando a un char* q no es mas que una dir de memoria un char o su equivalente en numerico, creo...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar