Programación General > C/C++

 Re: ME JUEGO EL CURSO¡¡¡¡¡¡¡¡¡¡

<< < (3/3)

AFRODITA:
OLLA QUIERO ALGO SIMILAR A ESTO:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>


typedef struct
{
   char *nombre;
   char *direccion;
   int edad;


}mao;


void introdatos(mao *p,int datos);
void borradatos(mao *p,int datos);
void modificadatos(mao *p,int datos);
void listadatos(mao *p,int datos);
void ventana();
void menu();


void main()
{
   ventana();
   mao *p;
   int datos=0,opc;
   p=(mao *)malloc (sizeof(mao));
   for(;;)
   {
      clrscr();
      menu();
      scanf ("%d",&opc);
      switch (opc)
      {
         case 1: datos++;
                 p=(mao *)realloc(p,datos*sizeof(mao));
                 introdatos(p,datos);break;
         case 2: listadatos(p,datos);break;
         case 3: modificadatos(p,datos);break;
         case 4: borradatos(p,datos);
                 datos--;
                 p=(mao *)realloc(p,datos*sizeof(mao));break;
                 case 5: exit(0);default:printf("ERROR");
      }
   }
   getch();
}

void introdatos(mao *p,int datos)
{
   char x[100],y[100],z[50];
   fflush(stdin);

   printf("Introduzca el nombre del cliente: ");
   gets(x);
   (&p[datos-1])->nombre=(char *)malloc(strlen(x)*sizeof(char));
   strcpy((&p[datos-1])->nombre,x);

   printf("Introduzca la direccion del cliente: ");
   gets(y);
   (&p[datos-1])->direccion=(char *)malloc(strlen(y)*sizeof(char));
   strcpy((&p[datos-1])->direccion,y);

   printf("Introduzca la edad del cliente: ");
   scanf("%d",&(&p[datos-1])->edad);


}

void borradatos(mao *p,int datos)
{
   int i,d;
   printf("Introduzca el cliente que desee eliminar(entre 0 y %d): ",datos-1);
   scanf("%d",&i);
   printf("El cliente a eliminar es %sn",i,(&p)->nombre);
   for(d=i;d<datos-1;d++)
      p[d]=p[d+1];
   getch();
}

void modificadatos(mao *p,int datos)
{
   int i;
   fflush(stdin);

   printf("Introduzca el cliente que desee modificar(entre 0 y %d): ",datos-1);
   scanf("%d",&i);
   printf("El cliente a modificar es %sn",i,(&p)->nombre);

   printf("Introduzca el nombre : ");
   gets((&p)->nombre);
   gets((&p)->nombre);

   printf("Introduzca la direccion: ");
   gets((&p)->direccion);

   printf("Introduzca la edad: ");
   scanf("%d",&((&p)->edad));


}

void listadatos(mao *p,int datos)
{
   int i;
   printf("Los clientes introducidos son:n");
   for(i=0;i<datos;i++)

   printf("nNombre: %sn Direccion: %sn Edad: %dn",(&p)->nombre,(&p)->direccion,(&p)->edad);
   getch();
}
void ventana()
{
   window(1,1,80,25);
   textbackground(13);
   textcolor(BLACK);
   clrscr();
}
void menu ()
{
   printf("nnnnnn************MENU*************n");
   printf("1)Introducir clientesn");
   printf("2)Listar clientesn");
   printf("3)Modificar clientesn");
   printf("4)Borrar clientesn");
   printf("5)Salirn");
}

PERO CON UN POCO MAS DE MANDANGA, PERO ES QUE YO ME PONGO HA MODIFICARLE Y ME DAN 200 ERRORES.
PORFAAAAAAAA

delpa:
Toma esto es lo mas parecido que he encontrado ya hecho, como comprenderas no me voy a poner a estudiar tu programa, que yo tambien tengo que estudiar mi carrera:)

---------------------------------------------
/*-------------------------*/
  /*  Ejemplo en C:          */
  /*  LISTA1.C               */
  /*                         */
  /*  Lista enlazada simple  */
  /*                         */
  /*  Comprobado con:        */
  /*    - Turbo C++ 1.01     */
  /*    - Djgpp 2.01         */
  /*-------------------------*/

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

  typedef

    struct f            /* Estos son los datos que guardamos: */
    {
      char nombre[30];          /*   Nombre, hasta 30 letras */
      char direccion[50];       /*   Direccion, hasta 50 */
      int edad;                 /*   Edad, un numero < 255 */
      struct f* siguiente;      /*   Y dirección de la siguiente */
    } Ficha;
 

  Ficha* dato1;                /* Va a ser un puntero a ficha */
  Ficha* dato2;                /* Otro puntero a ficha */
  Ficha* dato3;                /* Y otro más */

  void MuestraLista ( Ficha *inicial )
  {
    if (inicial)                               /* Si realmente hay lista */
    {
      printf("Nombre: %sn", inicial->nombre);
      printf("Dirección: %sn", inicial->direccion);
      printf("Edad: %dnn", inicial->edad);
      MuestraLista ( inicial->siguiente );    /* Y mira el siguiente */
    }
  }

  int main()
  {
  dato1 = (Ficha*) malloc (sizeof(Ficha)); /* Reservamos memoria */
  strcpy(dato1->nombre, "Pepe");           /* Guardamos el nombre, */
  strcpy(dato1->direccion, "Su casa");     /*   la dirección */
  dato1->edad = 40;                        /*   la edad */
  dato1->siguiente = NULL;                 /* y no hay ninguna más */
 

  dato2 = (Ficha*) malloc (sizeof(Ficha)); /* Reservamos memoria */
  strcpy(dato2->nombre, "Juan");           /* Guardamos el nombre, */
  strcpy(dato2->direccion, "No lo sé");    /*   la dirección */
  dato2->edad = 35;                        /*   la edad */
  dato2->siguiente = NULL;                 /* y no hay ninguna más */

  dato1->siguiente = dato2;                /* Enlazamos la anterior con ella */
 

  dato3 = (Ficha*) malloc (sizeof(Ficha)); /* La tercera */
  strcpy(dato3->nombre, "Carlos");
  strcpy(dato3->direccion, "Por ahí");
  dato3->edad = 14;
  dato3->siguiente = dato2;                /* enlazamos con la siguiente */

  dato1->siguiente = dato3;                /* y la anterior con ella */

  printf("La lista inicialmente es:n");
  MuestraLista (dato1);

  dato1->siguiente = dato2;        /* Borrar dato3: Enlaza Dato1 y Dato2 */
  free(dato3);                     /* Libera lo que ocupó Dato3 */

  printf("Y tras borrar dato3:nn");
  MuestraLista (dato1);

  return 0;
  }

 Esto es en esencia lo que pides, si le pones la funcion del menu y eso, esto se llaman listas y te costara comprenderlo, pero una vez comprendido resulta muy util y simplifica todo el proceso de programar bases de datos. Si te vas al foro de principiantes veras unos cursos que tratan esto en profundidad, aunque por supuesto no traen lo que pides, pero si parecido.

bench:
Creo que el Problema esta en la Forma Como Calculas el El Tamaño de la Structura mao con la instruccion sizeof

typedef struct
 {
  char *nombre;
  char *direccion;
  int edad;
  } mao;


void introdatos(mao *p,int datos);
void borradatos(mao *p,int datos);
void modificadatos(mao *p,int datos);
void listadatos(mao *p,int datos);
void ventana();
void menu();


void main()
{
ventana();
mao *p;
int datos=0,opc;
/***
La Structura mao Tiene dos Elementos
que Son Punteros tipo Char, Esta Instruccion no Calcula el espacio de memoria necesario
para Guardar un elemento en la structura
***********************************/
p=(mao *)malloc (sizeof(mao));
/******
Sin Que este entrando en un anlisis Profundo del Problema Te Sugiero Que Daclares
si requieres Memoria Dinamica
************************************/
p = (mao *)malloc(sizeof (mao)+ strlen(nombre)+ strlen(direccion));
/****************
Pero si ya Conoces el Tamaño de la Structura
Es mejor que Trabajes Sobre un Buffer con
dimensiones ya determinadas
*******************************************/
char Len_Int = sizeof(int); /*Portabilidad */
char Buf_Mao[Len_Int+47];/* 30 char x Nombre + 15 char x direccion.
/***
Modeas el Puntero
****************/
p = (mao *)Buf_Mao;

...
/*******
Creo Que Buena Parte del Problema Lo Tienes
Aqui. al Final Si usas  malloc, debes liberar la memoria co la instruccion free(mao p)
******************************************/


-----------------------------
Solo se Que no se NADA

karina gonzales:
la verdad es que yo ando buscando ejemplos para poder estudier para aprobar mi ramo, y quisiera saber si alguien sabe en donde los puedo encontrar programas de ejemplo o test  etc.. en borland c/c++:o:(

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa