| 
	
		|  Autor | Tema: Perfeccionar código escrito en C  (Leído 4,251 veces) |  
	| 
			| 
					
						| diegoCmC 
								
								 Desconectado 
								Mensajes: 177
								
								   | 
 
Hola buenas, acabo de aprender el manejo de estructuras en lenguaje C, y me gustaría que me dierais vuestra opinión sobre un código La función de esto seria saber que cosas hago y no debería hacer, o que no hago y debería de hacer, mas que nada para  no ir cogiendo vicios que no sean adecuados Muchas gracias a todos. Acabo de ver el post http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html  tendre que echarle un ojo jeje #include<stdio.h> //Estructuras para los datos personalesstruct nombre_completo{    //Datos personales: Nombre Apellido Apellido    char nombre[40], apellido1[40], apellido2[40];}; struct fecha_nacimiento{    int dia, mes, año; }; //Estructura en la que se almacenaran todos los datos de una personastruct datos{    //Datos personales (estructura externa)    struct nombre_completo persona;    //Fecha de nacimiento (estructura externa)    struct fecha_nacimiento nacimiento;    long telefono;  }; //Funciones de asignacion de datosstruct nombre_completo nuevo_nombre(){    struct nombre_completo nombre1;       return nombre1;} struct fecha_nacimiento nueva_fecha(){    struct fecha_nacimiento fecha1;     printf("\nFecha de nacimiento\n");    scanf("%d", &fecha1.dia);    scanf("%d", &fecha1.mes);    scanf("%d", &fecha1.a ño);     return fecha1;} //Funcion que asigna todos los datos personales por medio de llamadas a las otras funcionesstruct datos nuevos_datos(){    struct datos usuario;     //Llamada a la funcion que asigna Nombre y apellidos    usuario.persona=nuevo_nombre();     //Llamada a la funcion que asigna la fecha de nacimiento    usuario.nacimiento=nueva_fecha();     //Peticion del telefono al usuario    scanf("%d",&usuario.telefono);     return usuario;} //Funcion que imprime por pantalla los datosvoid mostrar_datos(struct datos asignado){    printf("\n\nLos datos que se han introducido son los siguientes:");    printf("\n----------------------------------------------------\n");    printf("Nombre completo: %s %s %s\n", asignado.persona .nombre,  asignado.persona .apellido1,  asignado.persona .apellido2);    printf("Fecha de nacimiento: %d/%d/%d\n", asignado.nacimiento .dia,  asignado.nacimiento .mes,  asignado.nacimiento .a ño);    printf("Numero de telefono: %d", asignado.telefono); }  int main(){    struct datos persona1;     //Asignacion de datos a persona1    persona1=nuevos_datos();     //LLamada a la funcion que muestra los datos por pantalla    mostrar_datos(persona1);     return 0;} 
 
 |  
						| 
								|  |  
								| « Última modificación: 22 Agosto 2012, 22:05 pm por diegoCmC » |  En línea | 
 
 a todas las que me abrieron su coraza traeles suerteya no creo en el amor pero querria volver a verte
 |  |  |  | 
			| 
					
						| soyloqbuskas 
								
								 Desconectado 
								Mensajes: 219
								
								 
								¡El conocimiento es de todos!
								
								
								
								
								
								   | 
 
Buenas diegoCmC, Para mejorar tu codigo yo cambiaria la funcion gets() por fgets(), de hecho si lees el enlace que has puesto, lo primero que te explica es "porque no usar gets()" Por lo demas no veo que este mal....(tampoco lo he compilado y ejecutado...) Pero si quieres aprender un par de cositas mas sobre C....Puedes escribir todas las funciones debajo de la funcion main() siempre y cuando escribas encima del main() las interfaces de las funciones. Y tambien podrias escribir tus funciones en un fichero llamado misFunciones.c crear otro fichero llamdo misFunciones.h con las interfaces de las funciones y por ultimo un fichero llamado main.c donde tienes que poner un #include "misFunciones.h" Mas info aqui: http://www.chuidiang.com/clinux/herramientas/librerias.php Estos 2 ultimos apuntes te van a ayudar a aprender un poco mas sobre C, y sobre todo, a la hora de hacer un programa con mucho codigo es muy necesario para mejorar su legibilidad. Seria horrible tener que leer un fichero.c con 1000 lineas de codigo.
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 "Si tienes 1 manzana y yo tengo otra manzana...y las intercambiamos, ambos seguiremos teniendo 1 manzana.
 Pero...si tu tienes 1 idea y yo tengo otra idea...
 y las intercambiamos, ambos tendremos 2 ideas."
 
 George Bernard Shaw
 |  |  |  | 
			| 
					
						| тαптяα 
								       
								
								 Desconectado 
								Mensajes: 1.151
								
								 
								Sic utere tuo ut alienum non laeda
								
								
								
								
								
								     | 
 
Errores que tenias, en C y C++ la letra ñ no la puedes usar en variables y estructuras. Ya esta todo retocado. Ahora funciona de 10 #include<stdio.h> //Estructuras para los datos personalesstruct nombre_completo{    //Datos personales: Nombre Apellido Apellido    char nombre[40], apellido1[40], apellido2[40];}; struct fecha_nacimiento{    int dia, mes, ano; }; //Estructura en la que se almacenaran todos los datos de una personastruct datos{    //Datos personales (estructura externa)    struct nombre_completo persona;    //Fecha de nacimiento (estructura externa)    struct fecha_nacimiento nacimiento;    long telefono;  }; //Funciones de asignacion de datosstruct nombre_completo nuevo_nombre(){    struct nombre_completo nombre1;       return nombre1;} struct fecha_nacimiento nueva_fecha(){    struct fecha_nacimiento fecha1;     printf("\nFecha de nacimiento\n");    scanf("%d", &fecha1.dia);    scanf("%d", &fecha1.mes);    scanf("%d", &fecha1.ano);     return fecha1;} //Funcion que asigna todos los datos personales por medio de llamadas a las otras funcionesstruct datos nuevos_datos(){    struct datos usuario;     //Llamada a la funcion que asigna Nombre y apellidos    usuario.persona=nuevo_nombre();     //Llamada a la funcion que asigna la fecha de nacimiento    usuario.nacimiento=nueva_fecha();     //Peticion del telefono al usuario    scanf("%d",&usuario.telefono);     return usuario;} //Funcion que imprime por pantalla los datosvoid mostrar_datos(struct datos asignado){    printf("\n\nLos datos que se han introducido son los siguientes:");    printf("\n----------------------------------------------------\n");    printf("Nombre completo: %s %s %s\n", asignado.persona .nombre,  asignado.persona .apellido1,  asignado.persona .apellido2);    printf("Fecha de nacimiento: %d/%d/%d\n", asignado.nacimiento .dia,  asignado.nacimiento .mes,  asignado.nacimiento .ano);    printf("Numero de telefono: %d", asignado.telefono); }  int main(){    struct datos persona1;     //Asignacion de datos a persona1    persona1=nuevos_datos();     //LLamada a la funcion que muestra los datos por pantalla    mostrar_datos(persona1);     return 0;} 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| diegoCmC 
								
								 Desconectado 
								Mensajes: 177
								
								   | 
 
Gracias a los 2 por las respuestas, tendre que mirarme bien lo de fgets(), y lo de escribir las funciones fuera del codigo Lo de año me lo debio copiar mal, por que en mi codigo tengo escrito anio    Un saludo |  
						| 
								|  |  
								|  |  En línea | 
 
 a todas las que me abrieron su coraza traeles suerteya no creo en el amor pero querria volver a verte
 |  |  |  | 
			| 
					
						| тαптяα 
								       
								
								 Desconectado 
								Mensajes: 1.151
								
								 
								Sic utere tuo ut alienum non laeda
								
								
								
								
								
								     | 
 
Gracias a los 2 por las respuestas, tendre que mirarme bien lo de fgets(), y lo de escribir las funciones fuera del codigo Lo de año me lo debio copiar mal, por que en mi codigo tengo escrito año    Un saludoNo es "año" sino "anio" o "ano" como quieras |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| diegoCmC 
								
								 Desconectado 
								Mensajes: 177
								
								   | 
 
algo le pasa al foro, no escribo año escribo a_n_i_o todo junto jajajaj |  
						| 
								|  |  
								|  |  En línea | 
 
 a todas las que me abrieron su coraza traeles suerteya no creo en el amor pero querria volver a verte
 |  |  |  | 
			| 
					
						| 0xDani 
								       
								
								 Desconectado 
								Mensajes: 1.077
								
								   | 
 
Si dices que acabas de aprender a manejar estructuras, seguramente no habras visto los punteros, pero la estructura nombre_completo la podrias dejar asi: struct nombre_completo{ char* nombres[3];}; 
 Asi, nombres[0] apuntaria al nombre, nombres[1] al apellido1 y nombres[2] al apellido2. Despues, con la cantidad de respuestas que has tenido, me extraña que nadie te haya desaconsejado usar fflush(stdin).En el post de lo que no hay que hacer en C/C++ lo veras mejor explicado. En vez de esto te aconsejo usar while(getchar()!='\n') Por lo demas esta bastante bien. Saludos. |  
						| 
								|  |  
								|  |  En línea | 
 
 I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
 I code for $$$
 Hago trabajos en C/C++
 Contactar por PM
 |  |  |  | 
			| 
					
						| avesudra 
								 
								
								 Desconectado 
								Mensajes: 724
								
								 
								Intentando ser mejor cada día :)
								
								
								
								
								
								   | 
 
Despues, con la cantidad de respuestas que has tenido, me extraña que nadie te haya desaconsejado usar fflush(stdin).En el post de lo que no hay que hacer en C/C++ lo veras mejor explicado. En vez de esto te aconsejo usar while(getchar()!='\n')
 Por lo demas esta bastante bien.
 
 Saludos.
 
 
 Se lo iba a decir fíjate.Pero de todas maneras fgets + sscanf para introducir bien los valores y que no haga falta limpiar el buffer , que ya dijo en su momento Eternal Idol aquí: Zanjado: NO USAR JAMAS. fgets + sscanf  #include <stdio.h> int main(int argc, char **argv){    int opcion;     do{        printf("Opcion: ");	char linea[80];	fgets(linea, sizeof(linea), stdin);        sscanf(linea, "%d",&opcion);    }while(opcion!=0);     return 0;} 
 |  
						| 
								|  |  
								| « Última modificación: 23 Agosto 2012, 03:23 am por avesudra » |  En línea | 
 
 Regístrate en   |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Escrito sobre VMWare. Tutoriales - Documentación
 | NemeSys | 0 | 7,500 |  3 Febrero 2005, 07:22 am por NemeSys
 |  
						|   |   | Servidor web escrito en C Programación C/C++
 | Psicotron | 7 | 6,220 |  8 Septiembre 2016, 19:48 pm por AlbertoBSD
 |  
						|   |   | Algoritmo escrito en C Programación C/C++
 | Kyon-san | 7 | 6,422 |  25 Noviembre 2010, 22:04 pm por ace332
 |  
						|   |   | Ayuda perfeccionar programa Programación C/C++
 | novatus84 | 0 | 1,604 |  15 Diciembre 2014, 19:02 pm por novatus84
 |  
						|   |   | Crear arbol sintactico para analizar un codigo fuente escrito en C++ Programación C/C++
 | Ytsejam92 | 3 | 3,431 |  29 Septiembre 2016, 20:40 pm por dato000
 |    |