Autor
|
Tema: Perfeccionar código escrito en C (Leído 3,808 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 personales struct 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 persona struct datos{ //Datos personales (estructura externa) struct nombre_completo persona; //Fecha de nacimiento (estructura externa) struct fecha_nacimiento nacimiento; long telefono; }; //Funciones de asignacion de datos struct 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 funciones struct 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 datos void 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 suerte ya 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.phpEstos 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 personales struct 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 persona struct datos{ //Datos personales (estructura externa) struct nombre_completo persona; //Fecha de nacimiento (estructura externa) struct fecha_nacimiento nacimiento; long telefono; }; //Funciones de asignacion de datos struct 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 funciones struct 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 datos void 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 suerte ya 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 saludo No 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 suerte ya 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,091
|
3 Febrero 2005, 07:22 am
por NemeSys
|
|
|
Servidor web escrito en C
Programación C/C++
|
Psicotron
|
7
|
5,693
|
8 Septiembre 2016, 19:48 pm
por AlbertoBSD
|
|
|
Algoritmo escrito en C
Programación C/C++
|
Kyon-san
|
7
|
5,985
|
25 Noviembre 2010, 22:04 pm
por ace332
|
|
|
Ayuda perfeccionar programa
Programación C/C++
|
novatus84
|
0
|
1,421
|
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,117
|
29 Septiembre 2016, 20:40 pm
por dato000
|
|