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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cual es el problema con mi codigo en C?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cual es el problema con mi codigo en C?  (Leído 1,877 veces)
Evox4

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Cual es el problema con mi codigo en C?
« en: 4 Septiembre 2016, 23:59 pm »

Código
  1.  
  2. #include <stdlib.h>
  3. #include<stdio.h>
  4. #define MAX_NOMBRE 30
  5.  
  6. struct pelicula{
  7. char *nombre;
  8. char *genero;
  9. short año;
  10. int numDirectores;
  11. char *directores[10];
  12. };
  13.  
  14. void imprimirDatosPelicula(struct pelicula);
  15. void LeerDatosPelicula( struct pelicula *peli);
  16.  
  17. int main(){
  18. struct pelicula peli;
  19. LeerDatosPelicula(&peli);
  20. imprimirDatosPelicula(peli);
  21. return 0;
  22. }
  23.  
  24. void imprimirDatosPelicula(struct pelicula movie){
  25. printf("PELICULA: %s\n", movie.nombre);
  26. printf("GENERO: %s\n", movie.genero);
  27. printf("año: %d\n", movie.año);
  28. printf("# DIRECTOR(ES): %d \n", movie.numDirectores);
  29. int cont = 0;
  30. for ( ; cont < movie.numDirectores ; cont++){
  31. printf("DIRECTOR: %s\n", movie.directores[cont]);
  32.    }
  33. }
  34.  
  35.  
  36. void LeerDatosPelicula(struct pelicula *peli){
  37.  int i=0;
  38.  
  39.   printf("\n\n\tlEER DATOS PELICULA\n");
  40.  printf("Pelicula: ");
  41.    fgets(peli->nombre, MAX_NOMBRE, stdin);
  42. fflush(stdin);
  43. printf ("Genero: ");
  44. fgets(peli->genero, MAX_NOMBRE, stdin);
  45. fflush(stdin);
  46. printf("año: ");
  47. scanf("%d",peli->año);
  48. printf("Cuantos directores?: ");
  49. scanf("%d",peli->numDirectores);
  50. if(peli->numDirectores < 1)   peli->numDirectores=1;
  51. if(peli->numDirectores > 10)  peli->numDirectores=10;
  52.  
  53. for(i=0; i< 1; i++){
  54. peli->directores[i]=(char*) malloc (sizeof (char)*MAX_NOMBRE);
  55. printf("Director %d:  ",i+1);
  56. fflush(stdin);
  57. gets(peli->directores[i]);
  58. }
  59.  
  60. }
  61.  
  62.  
  63.  

Estoy usando Devc++ y al parecer compila muy bien pero a la hora de pedir datos marca error. Alguien que me ayude.



« Última modificación: 5 Septiembre 2016, 00:10 am por Evox4 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cual es el problema con mi codigo en C?
« Respuesta #1 en: 5 Septiembre 2016, 00:22 am »

Es raro que te acepte 'año' cuando la 'ñ' no suele ser una letra válida para un identificador.
También debería saltarte un aviso por el uso de gets. Cámbialo por fgets, como en las demás partes del código.

Ahora los errores te saltan porqué intentas asignar los valores recogidos por fgets a punteros sin inicializar. Para solucionarlo puedes hacer varias cosas:
  • En el struct en vez de punteros usar arrays.
  • Usar malloc para adquirir memoria para los punteros antes de tomar las cadenas con fgets
  • Usar scanf con el operador %ms para que éste adquiera memoria por ti para el puntero


En línea

Evox4

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Cual es el problema con mi codigo en C?
« Respuesta #2 en: 5 Septiembre 2016, 00:55 am »

En realidad no estoy haciendo uso de la letra ñ, estoy usando poniendolo como "a n i o".
No me permiten usar arrays en el programa.


He asignado memoria como me dijiste y ahora si avanza pero cuando pide cuantos directores necesita ya se cierra.


tambien estoy haciendo uso de " (int *)&peli->año ", que en verdad no se que hace. jeje
Algun otro consejo?


Código
  1. void LeerDatosPelicula(struct pelicula *peli){
  2.  int i=0;
  3. peli->nombre = (char*) malloc(sizeof (char)*MAX_NOMBRE);
  4. peli->genero = (char*) malloc(sizeof (char)*MAX_NOMBRE);
  5.   printf("\n\n\tlEER DATOS PELICULA\n");
  6.  printf("Pelicula: ");
  7.    fgets(peli->nombre, MAX_NOMBRE, stdin);
  8. fflush(stdin);
  9. printf ("Genero: ");
  10. fgets(peli->genero, MAX_NOMBRE, stdin);
  11. fflush(stdin);
  12. printf("año: ");
  13. fflush(stdin);
  14. scanf("%d",(int *)&peli->año);
  15. printf("Cuantos directores?: ");
  16. scanf("%d",peli->numDirectores);
  17. if(peli->numDirectores < 1)   peli->numDirectores=1;
  18. if(peli->numDirectores > 10)  peli->numDirectores=10;
  19.  
  20. for(i=0; i< peli->numDirectores; i++){
  21. peli->directores[i]=(char*) malloc (sizeof (char)*MAX_NOMBRE);
  22. printf("Director %d:  ",i+1);
  23. fflush(stdin);
  24. fgets(peli->directores[i], MAX_NOMBRE, stdin);
  25. }
  26.  
  27. }
  28.  
  29.  
« Última modificación: 5 Septiembre 2016, 00:58 am por Evox4 » 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