|
Mostrar Temas
|
Páginas: 1 [2]
|
11
|
Programación / Programación C/C++ / Estructuras Anidadas, dudas
|
en: 8 Febrero 2020, 21:28 pm
|
Nose si la estructura anidada esta bien declarada porque cuando voy a ingresar los datos del coordinador el programa deja de funcionar, y si estoy creando bien las cadenas y mercados dinamicamente? /* Crear las cadenas dinámicamente. Los mercados crearlos dinámicamente. */ #include<stdio.h> #include<stdlib.h> typedef struct Mercados_Municipales{ char *nombre; char *direccion; char *telefono; struct Datos_Coordinador *c; }Mercados; struct Datos_Coordinador{ char *nombrec; char *apellidoc; char *cedulac; char *telefonoc; }; void Presentacion(); Mercados *Leer_Mercado(void); void Imprimir_Mercado(Mercados *mercado); int main(){ Mercados *mercados[20]; char desicion; int cantidad, mercado = 0; Presentacion(); for(cantidad = 0; cantidad < 20; cantidad++){ printf("\n\tMercado Municipal #%d\n\n", cantidad + 1); mercados[cantidad] = Leer_Mercado(); do{ printf("\n\tPasamos a otro? [S/N] "); desicion = getchar(); /* Leemos un caracter */ while(getchar() == EOF ); /* Necesario para que se coma el \n */ }while(desicion != 'S' && desicion != 's' && desicion != 'N' && desicion != 'n'); /* Si elige N o n, se sale */ if(desicion == 'N' || desicion == 'n') break; } printf("\nInformacion del Mercado: "); Imprimir_Mercado(mercados[mercado - 1]); return 0; } void Presentacion(){ printf("\t\t********************************\n"); printf("\t\t* Ciudad Guayana *\n"); printf("\t\t* Mercados municipales *\n"); printf("\t\t********************************\n"); } Mercados *Leer_Mercado(){ Mercados *mercado = (Mercados *) malloc(sizeof(Mercados )); mercado ->nombre = (char *) malloc(sizeof(char) * 20); mercado ->direccion = (char *) malloc(sizeof(char) * 50); mercado ->telefono = (char *) malloc(sizeof(char) * 15); gets(mercado ->direccion ); mercado ->c ->nombrec = (char *) malloc(sizeof(char) * 20); mercado ->c ->apellidoc = (char *) malloc(sizeof(char) * 20); mercado ->c ->cedulac = (char *) malloc(sizeof(char) * 15); mercado ->c ->telefonoc = (char *) malloc(sizeof(char) * 15); printf("Informacion del Coordinador\n\n"); gets(mercado ->c ->nombrec ); gets(mercado ->c ->apellidoc ); gets(mercado ->c ->cedulac ); gets(mercado ->c ->telefonoc ); return mercado; } void Imprimir_Mercado(Mercados *mercado){ printf("\n\tMercado Municipal: %s\n\n", mercado ->nombre ); printf("Direccion: %s\tTelefono: %s\n\n", mercado->direccion, mercado->telefono); printf("Datos del Coordinador:\n\n"); mercado->c->nombrec, mercado->c->apellidoc, mercado->c->cedulac); printf("Telefono: %s\n\n", mercado ->c ->telefonoc ); }
|
|
|
12
|
Programación / Programación C/C++ / Ayuda con Estructuras
|
en: 8 Febrero 2020, 07:40 am
|
El programa deja de funcionar con la funcion imprimir_mercado, y no entiendo por que sucede esto #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Mercados_Municipales{ char nombre[20]; char direccion[50]; char telefono[11]; }Mercados; Mercados leer_mercado(void); void imprimir_mercado(Mercados mercado); int main(){ Mercados mercados[20]; Mercados mercado; char desicion; int i, cantidad = 0, numero; printf("\n\t\tMercados Municipales de Ciudad Guayana\n\n"); while(cantidad < 20){ do{ printf("%d Mercados Municipales. Pasamos a otro? [S/N] ", cantidad ); desicion = getchar(); // Leemos un caracter while(getchar() == EOF ); // Necesario para se coma el \n }while(desicion != 'S' && desicion != 's' && desicion != 'N' && desicion != 'n'); if(desicion == 'N' || desicion == 'n') break; // Si elige N, se sale mercado = leer_mercado(); mercados[cantidad++] = mercado; } printf("\nMostrar informacion del Mercado: "); imprimir_mercado(mercados[numero]); return 0; } Mercados leer_mercado(){ Mercados mercado; return mercado; } void imprimir_mercado(Mercados mercado){ printf("\n\n\t\t%s", mercado. nombre); printf("\nDireccion: &s\tTelefono: %s\n", mercado. direccion, mercado. telefono); }
|
|
|
14
|
Programación / Programación C/C++ / Ayuda URGENTE con este programa en C
|
en: 22 Octubre 2018, 01:13 am
|
Tengo problemas con estas dos funciones void RegistrarUsuario(); void InicioSesion(); la registrar usuario me guarda el primer usuario cuando se crea al archivo pero luego me dice email registrado con todos los demás que intento guardar y inicio sesión después de introducir email y contraseña dice programa dejo de funcionar #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #define MAX 50 char Linea[MAX]; /* ---------------------- | Definir Estructuras | ----------------------*/ // Usuario typedef struct Billetera{ char moneda[MAX]; float saldo; }Monedas; typedef struct Datos{ char nombre[MAX]; char apellido[MAX]; char telefono[MAX]; char pais[MAX]; }DatosPersonales; typedef struct PerfilUsuario{ char e_mail[MAX]; char pasword[MAX]; DatosPersonales p; Monedas m; }Usuario; // Administrador typedef struct CompraVenta{ char moneda[MAX]; float precioD; float precioE; float precioBS; float compra; float venta; }Moneda; typedef struct PerfilAdministrador{ Moneda monedas; }Administrador; int MostrarMenu_BilleteraVirtual(); int MostrarMenu_InicioSesion(); int LeerCadena(char *cadena, int n); int ConfirmarEmail(char email[], Usuario *usuario); void InicioSesion(); void RegistrarUsuario(); void GuardarCuentaUsuario(Usuario *usuario); void MenuPrincipal(); void MenuInicioSesion(); void FinalizarPrograma(); int main(){ switch(MostrarMenu_BilleteraVirtual()){ case 1: InicioSesion(); break; case 2: RegistrarUsuario(); break; case 3: break; case 4: FinalizarPrograma(); break; default: printf("\n\t\t ==================="); printf("\n\t\t| Opcion incorrecta |"); printf("\n\t\t ==================="); MenuPrincipal(); main(); } return 0; } int MostrarMenu_BilleteraVirtual(){ int opcion = 0; printf("\n\t\t\t\t ==================="); printf("\n\t\t\t\t| Billetera Virtual |"); printf("\n\t\t\t\t ===================\n\n"); printf("\t\t[1] Ingresar como Usuario\n"); printf("\t\t[2] Registrarse\n"); printf("\t\t[3] Ingresar como Administrador\n"); printf("\t\t[4] Salir del Programa\n"); printf("\n\t\tDigite su opcion: [ ]\b\b"); LeerCadena(Linea, MAX); return opcion; } int MostrarMenu_InicioSesion(){ int opcion = 0; printf("\t\t[1] Perfil de Usuario\n"); printf("\t\t[2] Su Billetera\n"); printf("\t\t[3] Comprar Criptomonedas\n"); printf("\t\t[4] Vender Criptomonedas\n"); printf("\t\t[5] Cerrar Sesion\n"); printf("\n\t\tDigite su opcion: [ ]\b\b"); LeerCadena(Linea, MAX); return opcion; } void RegistrarUsuario(){ Usuario usuario; printf("\n\t\t\t\t ================"); printf("\n\t\t\t\t| Cree su Cuenta |"); printf("\n\t\t\t\t ================\n\n"); printf("\t\tNombre de pila: "); LeerCadena(usuario.p.nombre, MAX); LeerCadena(usuario.p.nombre, MAX); printf("\n\t\tCorreo elctronico: "); LeerCadena(usuario.e_mail, MAX); printf("\t\tElegir una contasena: "); LeerCadena(usuario.pasword, MAX); if(ConfirmarEmail(usuario.e_mail, &usuario) == 0){ GuardarCuentaUsuario(&usuario); MenuPrincipal(); }else{ printf("\n\t\tEste Email ya tiene Cuenta de Usuario"); MenuPrincipal(); } } void InicioSesion(){ FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "rb"); char pass[MAX], e_mail[MAX], encontrado; Usuario usuario; if(archivo == NULL){ printf("\n\t\t ========================"); printf("\n\t\t|Lo siento. ERROR Interno|"); printf("\n\t\t ========================"); MenuPrincipal(); }else{ encontrado = 0; printf("\n\t\t\t ====================================="); printf("\n\t\t\t| Iniciar sesion en Billetera Virtual |"); printf("\n\t\t\t =====================================\n\n"); printf("\t\tCorreo electronico: "); LeerCadena(e_mail, MAX); LeerCadena(pass, MAX); /* Se recorre el archivo secuencialmente */ fseek(archivo , 0, SEEK_SET ); /* Posiciona el cursor al principio del archivo */ fread(&usuario , sizeof(usuario ), 1, archivo ); if((strcmp(usuario. e_mail, e_mail ) == 0) && (strcmp(usuario. pasword, pass ) == 0)){ encontrado = 1; } fread(&usuario , sizeof(usuario ), 1, archivo ); } if(encontrado == 1){ printf("\n\tBilletera Virtual\t\t%s %s\n\n", usuario. p. nombre, usuario. p. apellido); switch(MostrarMenu_InicioSesion()){ case 1: break; case 2: break; case 3: break; case 4: break; case 5: MenuPrincipal(); break; default: printf("\n\t\t ==================="); printf("\n\t\t| Opcion incorrecta |"); printf("\n\t\t ==================="); MenuInicioSesion(); break; } }else{ printf("\n\n\t\tUsuario no registrado"); MenuPrincipal(); } } } int ConfirmarEmail(char email[], Usuario *usuario){ FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "rb"); int existe; if(archivo == NULL){ existe = 0; }else{ existe = 0; fread(usuario , sizeof(usuario ), 1, archivo ); if(strcmp(usuario ->e_mail , email ) == 0){ existe = 1; break; } fread(usuario , sizeof(usuario ), 1, archivo ); } } return existe; } void GuardarCuentaUsuario(Usuario *usuario){ FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "ab"); if(archivo == NULL){ printf("\n\t\t ========================"); printf("\n\t\t|Lo siento. ERROR Interno|"); printf("\n\t\t ========================"); MenuPrincipal(); }else{ fwrite(usuario , sizeof(usuario ), 1, archivo ); printf("\n\t\tUsuario Registrado con EXITO"); } } int LeerCadena(char *cadena, int n){ int i, c; if (c == EOF) { cadena[0] = '\0'; return 0; } if (c == '\n') { i = 0; } else { cadena[0] = c; i = 1; } for (; i < n - 1 && (c = getchar()) != EOF && c != '\n'; i ++) { cadena[i] = c; } cadena[i] = '\0'; if (c != '\n' && c != EOF) while ((c = getchar()) != '\n' && c != EOF ); return 1; } void MenuPrincipal(){ Sleep(3000); main(); } void MenuInicioSesion(){ Sleep(3000); MostrarMenu_InicioSesion(); } void FinalizarPrograma(){ printf("\n\t ==================================================="); printf("\n\t| LA Billetera Virtual CERRARA en Cualquier Momento |"); printf("\n\t ===================================================\n\n"); Sleep(3000); }
|
|
|
15
|
Programación / Programación C/C++ / Ayuda con este programa en C
|
en: 22 Julio 2018, 15:26 pm
|
Quiero comparar si una fecha es mayor que la otra en este programa si alguien me puede dar una idea de como hacerlo que no sea con if() /* Escribe un programa para calcular el numero de dias que hay entre dos fechas; declarar fecha como una estructura */ #include<stdio.h> struct fecha{ unsigned int dia, mes, año; }; int main(int argc, char *argv[]){ struct fecha f[3]; int i, dia, mes, año; for(i=0; i<2; i++){ printf("Introduzca fecha %d: ", i +1); scanf("%d %d %d", &f [i ]. dia, &f [i ]. mes, &f [i ]. año ); } dia = f[0].dia - f[1].dia; mes = f[0].mes - f[1].mes; año = f[0].año - f[1].año; año = año * 360; mes = mes * 30; f[2].dia = año + (mes) + (dia); printf("\n\n\nDias Trascurridos %d", f [2]. dia); return 0; }
|
|
|
16
|
Programación / Programación C/C++ / Ayuda con estructuras anidadas
|
en: 20 Julio 2018, 00:50 am
|
Cuando estoy introduciendo los datos me dice programa dejo de funcionar, si alguien puede ver mi error y decirme por favor /* Se desea registrar una estructura Persona_Empleado que contenga como miembros los datos de una persona empleado que a su vez tenga los datos de la fecha de nacimiento. En el programa se muestra el uso de la estructura, se define una función para dar entrada a los datos de la estructura y otra función para dar salida a los datos de una estructura persona. A la función de entrada se transmite por dirección (&p) la variable estructura, por lo que el argumento correspondiente tiene que ser un Ipuntero (*p) y el acceso a los campos se hace con el selector -> */ #include<stdio.h> struct fecha{ int dia, mes, año; }; struct persona{ char nombre[20]; int edad; int altura; int peso; struct fecha f; }; struct persona_empleado{ struct persona unapersona; int salario; int horas_por_semana; }; /* Prototipo de funciones */ void entrada(struct persona_empleado *p); void salida(struct persona_empleado up); void main(){ /* Define una variable persona_empleado */ struct persona_empleado p; /* Llamada a entrada() transmitiendo la direccion */ entrada(&p); /* Salida de los datos almacenados */ salida(p) ; } void entrada(struct persona_empleado *p){ printf("\nIntroduzca su nombre: "); gets(p ->unapersona. nombre); printf("Introduzca su edad: "); scanf("%d", p ->unapersona. edad); printf("Introduzca su altura: "); scanf("%d", p ->unapersona. altura); printf("Introduzca su peso: "); scanf("%d", p ->unapersona. peso); printf("Introduzca su fecha de nacimiento: "); scanf("%d %d %d", p ->unapersona. f. dia, p->unapersona.f.mes, p->unapersona.f.año); printf("Introduzca su salario: "); printf("Introduzca numero de horas"); scanf("%d", p ->horas_por_semana ); } void salida(struct persona_empleado up){ printf("\n\n\tDatos de un Empleado"); printf("\n\n\t--------------------"); printf("Nombre: %s\n", up. unapersona. nombre); printf("Edad: %d\n", up. unapersona. edad); printf("Fecha de nacimiento: %d-%d-%d", up. unapersona. f. dia, up.unapersona.f.mes, up.unapersona.f.año); printf("Altura: %d\n", up. unapersona. altura); printf("Peso: %d\n", up. unapersona. peso); printf("Salario: %d\n", up. salario); printf("Numero de horas: %d\n", up. horas_por_semana); }
|
|
|
17
|
Programación / Programación C/C++ / Guardar Lista Enlazada en Archivo Binario
|
en: 4 Abril 2018, 00:34 am
|
Hola estoy comenzando con las listas, si alguien puede decirme caul es mi error el programa se me queda colgado en la funcion LeerDatosPersona y no encuentro el problema #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "Funciones.h" void InicioSecion(); void RegistrarPersona(); /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int opcion = 0, repite = 1; do{ Presentacion(); Menu(); LeerCadena(Linea, M); switch(opcion){ case 1: break; case 2: RegistrarPersona(); break; case 3: break; case 4: repite = 0; break; default: printf("\n\tOpcion Incorrecta: PRECIONE (1, 2, 3, 4)"); break; } }while(repite); return 0; } void RegistrarPersona(){ Persona *persona; int buscarCedula = 0, repite = 1; char respuesta[M]; do{ Presentacion(); printf("\n\n\t\t\t .:Registro de Usuario:.\n"); LeerCadena(Linea, M); sscanf(Linea , "%d", &buscarCedula ); if(!ExistePersona(buscarCedula, persona)){ persona = LeerDatosPersona(buscarCedula); if (primer == NULL) primer = persona; if (ultimo != NULL) ultimo->siguiente = persona; ultimo = persona; if (GuardarDatos(ultimo)){ Presentacion(); printf("\n\n\t\t\t .:Usuario Registrado Satisfactoriamente:.\n"); }else{ Presentacion(); printf("\n\n\t\t\t .:ERROR:.\n"); printf("\n\tIntentelo Mas tarde"); } }else{ Presentacion(); printf("\n\n\t\t\t .:El Usuario %d ya EXISTE:.\n", buscarCedula ); printf("\n\tNo puede registrarse multiples veces\n"); } printf("\n\tDesea registrar otra persona? [S/N]: "); LeerCadena(respuesta, M); if (!(strcmp(respuesta , "s") == 0 || strcmp(respuesta , "S") == 0)){ repite = 0; } }while(repite); }
Funciones.h #include <stdio.h> #include <stdlib.h> #include <string.h> void Presentacion(){ } void Menu(){ printf("\n\t\t[1]. Inicio de Sesion\n"); printf("\t\t[2]. Registro de Usuario\n"); printf("\t\t[3]. Administrador\n"); printf("\n\t\tIngrese su Opcion: [ ]\b\b"); } #define M 100 char Linea[M]; typedef struct Persona{ char nombre[M]; char apellido[M]; char correo[M]; char password[M]; long int telefono; int cedula; struct Persona *siguiente; }Persona; Persona *primer = NULL; Persona *ultimo = NULL; int LeerCadena(char *cadena, int n){ int i, c; if (c == EOF){ cadena[0] = '\0'; return 0; } if (c == '\n'){ i = 0; }else{ cadena[0] = c; i = 1; } for (; i < n -1 && (c = getchar()) != EOF && c != '\n'; i ++){ cadena[i] = c; } cadena[i] = '\0'; if (c != '\n' && c != EOF) while ((c = getchar()) != '\n' && c != EOF ); return 1; } char ExistePersona(int buscarCedula, Persona *persona){ FILE *archivo = fopen ("DATOS.dat", "rb"); char existe; if (archivo == NULL){ existe = 0; }else{ existe = 0; fread (&(*persona ), sizeof(persona ), 1, archivo ); if (persona->cedula == buscarCedula){ existe = 1; break; } fread (&(*persona ), sizeof(persona ), 1, archivo ); } } return existe; } Persona *LeerDatosPersona(int cedula){ Persona *persona = (Persona *) malloc(sizeof(Persona )); if (persona != NULL){ persona->cedula = cedula; printf("\n\t\tPrimer Nombre: "); LeerCadena(persona->apellido, M); printf("\n\t\tPrimer Apellido: "); LeerCadena(persona->apellido, M); LeerCadena(persona->correo, M); LeerCadena(persona->password, M); LeerCadena(Linea, M); sscanf(Linea , "%d", persona ->telefono ); persona->siguiente = NULL; }else{ Presentacion(); printf("\n\n\t\t\t .:Memoria Insuficiente:.\n"); } return persona; } char GuardarDatos(Persona *persona){ char guardar; FILE *archivo = fopen ("DATOS.dat", "ab"); if (archivo == NULL){ guardar = 0; }else{ fwrite (&(*persona ), sizeof(persona ), 1, archivo ); guardar = 1; } return guardar; }
|
|
|
18
|
Programación / Programación C/C++ / Programa en C que Agenda Cita de Pasaporte
|
en: 22 Marzo 2018, 20:22 pm
|
Hola necesito ayuda con un programa en c que de una cita para pasaporte, por ejemplo; pedir Cita: si o no si: fecha de hoy 22/03/2018 dará la cita para 10 días después y no puede ser sábado ni domingo 2/04/2018
y el programa solo puede dar 10 citas por día
Si alguien me puede dar una idea de como debo hacer esto, que no entiendo muy bien como hacer esto
|
|
|
|
|
|
|