elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Alguien me puede ayudar, no funciona mi asignación dinámica para arreglos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alguien me puede ayudar, no funciona mi asignación dinámica para arreglos  (Leído 1,739 veces)
Oscaro55443

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Alguien me puede ayudar, no funciona mi asignación dinámica para arreglos
« en: 17 Marzo 2019, 06:57 am »

main.c
#include"menu.h"
#include<locale.h>
#include<stdlib.h>
#include<string.h>

int main() {
   //setlocale(LC_CTYPE,"Spanish");
   
    int *contadorindice;
    int opcion;
    int bfolio;
    Paciente *pacientes;
   //Asignación memoria dinámica
   if(pacientes==NULL)
   {
   printf("memoria de espacio no asginada");
   }
   else{
   pacientes=(Paciente *)malloc(MAX_PA*sizeof(Paciente));
   pacientes[*contadorindice].nombrepa->apellidopapaciente=(char *)malloc(MAX_TEXTO*sizeof(char));
   pacientes[*contadorindice].nombrepa->nombrepaciente=(char *)malloc(MAX_TEXTO*sizeof(char));
   pacientes[*contadorindice].nombrepa->apellidomapaciente=(char*)malloc(MAX_TEXTO*sizeof(char));
   pacientes[*contadorindice].estatus->motivo=(char *)malloc(MAX_MOTIVO*sizeof(char));
   pacientes[*contadorindice].genero=(char*)malloc(MAX_TEXTO*sizeof(char));
   
   do {
   
       printf("Ingrese una opcion\n\n");
        printf("1)Registrar paciente\n2)Listar pacientes\n3)Busqueda de paciente por clave\n4)Borrar paciente\n5)Actualizar datos\n6)Triage\n7)Salir\nOpcion:");
        scanf("%i",&opcion);
        system("cls");
        switch (opcion) {
            fflush(stdin);
            case 1: {
               capturarPaciente(contadorindice,pacientes);
                  printf("indice: %i",*contadorindice);
               system("pause");
              system("cls");
               break;
            }
               
            case 2: {
                fflush(stdin);
                listarPaciente(contadorindice, pacientes);
                system("pause");
              system("cls");
                }
                break;
           case 3:{
                 printf("\nIngrese el folio del paciente que desea buscar: ");
               scanf("%i",&bfolio);
               busquedaPacientefo(bfolio,pacientes);
               system("pause");
              system("cls");
               }
               break; 
           case 6:{
              char archivotriage[100]="triage.txt",linea[1000];
              FILE *archivo;
              archivo=fopen(archivotriage,"r");
              while(!feof(archivo)){
                 printf("%s",fgets(linea,999,archivo));
              }
              system("pause");
              system("cls");
              break;
           }
           case 5:{
              printf("\nIngrese el folio del paciente que desea actualizar: ");
               scanf("%i",&bfolio);
               //MenuactualizarPaciente(*paciente, bfolio);
              break;
           }
           case 4:{
              printf("\nIngrese el folio del paciente que desea borrar: ");
              scanf("%i",&bfolio);
              borrarPaciente(bfolio,contadorindice,pacientes);   
              break;
           }
           case 7:{
              printf("Hasta la proxima\n");
              break;
           }
           
    }
   }while (opcion != 7);
   
      free(pacientes->genero);
      free(pacientes[*contadorindice].estatus->motivo);
      free(pacientes[*contadorindice].nombrepa->apellidomapaciente);
      free(pacientes[*contadorindice].nombrepa->nombrepaciente);
      free(pacientes[*contadorindice].nombrepa->apellidopapaciente);
      free (pacientes);
   
   contadorindice=NULL;
   pacientes=NULL;

   return 0;
   }
}
 
paciente.h
#ifndef paciente_h
#define paciente_h
#define MAX_TEXTO 30
#define MAX_PA 5
#define MAX_MOTIVO 300
//Variables

//prototipos
typedef struct {
   int mes;
    int dia;
    int ano;
}Fecha;
typedef struct{
   int horai;
   int minutosi;
}Hora;

typedef struct {
   char *nombrepaciente;
   char *apellidopapaciente;
   char *apellidomapaciente;
}Nombrepa;

typedef struct{
   int peso;
   char *motivo;
}Estatus;

typedef struct {
    int edad;
    char *genero;
    int folio;
    int contadorindice;
    Estatus *estatus;
    Nombrepa *nombrepa;
    Fecha fecha;
    Hora hora;
   
} Paciente;
void capturarPaciente (int *contadorindice,Paciente *paciente);
void listarPaciente (int *contadorindice,Paciente *paciente);
void busquedaPacientefo(int b,Paciente *paciente);
void MenuactualizarPaciente(Paciente paciente,int b);
void borrarPaciente(int b,int *contadorindice,Paciente *paciente);
//void actualizarPacienteInt(int *b,Paciente *paciente);
//void actualizarPacienteChar();


#endif /* paciente_h */

paciente.c
#include <stdio.h>
#include "paciente.h"
#include<string.h>
#include<stdlib.h>

void capturarPaciente (int *contadorindice,Paciente *paciente){
   
    printf ("Folio: \n");
    scanf ("%i",&paciente[*contadorindice].folio);
    printf ("Nombre: \n");
    scanf ("%s", paciente[*contadorindice].nombrepa->nombrepaciente);
    printf ("Apellido paterno: \n");
    scanf ("%s", paciente[*contadorindice].nombrepa->apellidopapaciente);
    printf ("Apellido materno: \n");
    scanf ("%s", paciente[*contadorindice].nombrepa->apellidomapaciente);
    printf("Genero: \n");
    scanf("%s",paciente[*contadorindice].genero);
    printf ("Edad: \n");
    scanf ("%i",&paciente[*contadorindice].edad);
    printf ("Dia de ingreso: \n");
    scanf ("%i", &paciente[*contadorindice].fecha.dia);
    printf ("Mes de ingreso: \n");
    scanf ("%i", &paciente[*contadorindice].fecha.mes);
   printf ("Año de ingreso: \n");
    scanf ("%i", &paciente[*contadorindice].fecha.ano);
    printf ("Hora de ingreso: \n");
    scanf ("%i", &paciente[*contadorindice].hora.horai);
   printf ("Minutos: \n");
    scanf ("%i", &paciente[*contadorindice].hora.minutosi);
    printf("Breve explicacion del motivo de la visita del paciente\n");
    fflush(stdin);
    gets(paciente[*contadorindice].estatus->motivo);
       printf("indice: %i",*contadorindice);
    (*contadorindice)++;
       printf("indice: %i",*contadorindice);
}
void listarPaciente (int *contadorindice,Paciente *paciente){
    int i;
    for (i=0;i<*contadorindice;i++){
    printf ("Folio: %i \nNombre del paciente: %s %s %s\nGenero: %s\nEdad: %i\nDia de ingreso: %i/%i/%i \nHora de ingreso: %i:%i\n\n",
            paciente->folio, paciente->nombrepa->nombrepaciente, paciente->nombrepa->apellidopapaciente ,paciente->nombrepa->apellidomapaciente
         ,paciente->genero,paciente->edad,paciente->fecha.dia,paciente->fecha.mes,paciente->fecha.ano,paciente->hora.horai,paciente->hora.minutosi );
            paciente++;
            }//para arreglo de pacientes

}

void busquedaPacientefo(int b,Paciente *paciente){
   int i;

   for(i=0;i<MAX_PA+1;i++,paciente++){
      if(b==paciente->folio){
         printf ("Folio: %i \nNombre del paciente: %s %s %s\nGenero: %s\nEdad: %i\nDia de ingreso: %i/%i/%i \nHora de ingreso: %i:%i\nMotivo por el que ingresó:\n %s\n",
            paciente->folio, paciente->nombrepa->nombrepaciente, paciente->nombrepa->apellidopapaciente ,paciente->nombrepa->apellidomapaciente
         ,paciente->genero,paciente->edad,paciente->fecha.dia,paciente->fecha.mes,paciente->fecha.ano,paciente->hora.horai,paciente->hora.minutosi,paciente->estatus->motivo );
         
       }
   }
   printf("\nEste paciente no se encuentra en la sala de urgencias\n");
}
void MenuactualizarPaciente(Paciente *paciente,int b){
   int i,opcionact;
   int nuevodatoint;
   char nuevodatochar[MAX_TEXTO];
   
   printf("\n¿Que dato desea modificar?");
   printf("\n1)Edad");
   printf("\n2)Nombre");
   printf("\n3)Apellido Paterno");
   printf("\n4)Apellido Materno");
   printf("\n5)Genero\n");
   scanf("%i",&opcionact);
   system("cls");
   switch(opcionact){
      case 1:{
         printf("\nIngrese el nuevo dato\n");
         scanf("%i",&nuevodatoint);
         for(i=0;i<MAX_PA+1;i++,paciente++){
            if(b==paciente->folio){
               paciente.edad=nuevodatoint;
            }
         system("cls");
         }
         break;
      }
      case 2:{
         printf("\nIngrese el nuevo dato\n");
         scanf("%s",nuevodatochar);
         for(i=0;i<MAX_PA+1;i++,paciente++){
            if(b==paciente->folio){
               strcpy(paciente.nombrepa->nombrepaciente,nuevodatochar);
            }
         system("cls");
         }
         break;
      }
      case 3:{
         printf("\nIngrese el nuevo dato\n");
         scanf("%s",nuevodatochar);
         for(i=0;i<MAX_PA+1;i++,paciente++){
            if(b==paciente->folio){
               strcpy(paciente.nombrepa->apellidopapaciente,nuevodatochar);
            }
         system("cls");
         }
         break;
      }
      case 4:{
         printf("\nIngrese el nuevo dato\n");
         scanf("%s",nuevodatochar);
         for(i=0;i<MAX_PA+1;i++,paciente++){
            if(b==paciente->folio){
               strcpy(paciente.nombrepa->apellidomapaciente,nuevodatochar);
            }
         system("cls");
         }
         break;
      }
      case 5:{
         printf("\nIngrese el nuevo dato\n");
         scanf("%s",nuevodatochar);
         for(i=0;i<MAX_PA+1;i++,paciente++){
            if(b==paciente->folio){
               strcpy(paciente.genero,nuevodatochar);
            }
         system("cls");
         }
         break;
      }
      
   }
   
}
void borrarPaciente(int b,int *contadorindice,Paciente *paciente){//pequeño fallo al querer borrar el 2 paciente de 3
   int i;
   Paciente aux;
   printf("indice: %i",*contadorindice);
   for(i=0;i<MAX_PA+1;i++,paciente++){
      if(b==paciente->folio){
         aux=paciente;
         paciente=paciente[*contadorindice-1];
            printf("indice: %i",*contadorindice);
         (*contadorindice)--;
            printf("indice: %i",*contadorindice);
         printf("\nPaciente con folio %i fue borrado\n",b);
         system("pause");
         system("cls");
      }
   }
   
}



En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Alguien me puede ayudar, no funciona mi asignación dinámica para arreglos
« Respuesta #1 en: 17 Marzo 2019, 11:13 am »

Los dos primeros errores:
contadorindice es un puntero sin inicializar por tanto no lo puedes usar como índice. Tampoco lo podrías usar si fuera un entero sin inicializar.

Primero tienes que adquirir memoria dinámica para pacientes antes de hacer la comprobación del if. De nuevo estás usando un dato sin inicializar.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines