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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema Programa C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema Programa C  (Leído 3,494 veces)
pozo_23

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Problema Programa C
« en: 20 Diciembre 2016, 14:36 pm »

Hola, estoy haciendo un programa en C y tengo un problema. Tengo la siguiente función:
Código
  1. void mostrarAlumnos(tipoAlumno alumnos[NALUMNOS],int contador){
  2.    int i;
  3.  
  4.  
  5.  
  6.    printf("Los alumnos son:\n");
  7.  
  8.    for(i=0;i<contador;i++){
  9.  
  10.        puts(alumnos[i].nombre);
  11.        printf("%s",alumnos[i].nombre);
  12.        printf("DNI:%s\n",alumnos[i].identificador);
  13.        printf("Curso:%d\n",alumnos[i].curso);
  14.        printf("Telefono:%d\n",alumnos[i].telefono);
  15.  
  16.    }

A la hora de llamar a la funcion en main, la funcion no me muestra el primer campo, nombre..  Deja un espacio en blanco y muestra los siguientes campos. Nombre lo tengo declarado como char[50] dentro de la estructura , y para guardar caracteres en este campo utilizo gets ¿Cual es el problema? Gracias de antemano

CoAdm: los códigos deben ir en etiquetas GeSHi, los títulos deben ser descriptivos


« Última modificación: 20 Diciembre 2016, 14:48 pm por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema Programa C
« Respuesta #1 en: 20 Diciembre 2016, 14:50 pm »

En ese código no parece haber problema, usa el debugger y analiza la lógica de tu programa


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
pozo_23

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema Programa C
« Respuesta #2 en: 20 Diciembre 2016, 14:58 pm »

Creo que se cual es el problema. Cuando introduzco un nombre, por ejemplo francisco, en nombre[0] me aparece '\0' y en nombre[1] me aparece r, nombre[2]=a ... ¿Cómo puedo solucionar eso?
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema Programa C
« Respuesta #3 en: 20 Diciembre 2016, 15:13 pm »

Los nombres deben ser un char bidimensionalla primera dimensión se mueve entre nombres, la segunda contiene cada letra del nombre
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema Programa C
« Respuesta #4 en: 20 Diciembre 2016, 16:21 pm »

Muestra la función donde adquieres los datos.
En línea

pozo_23

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema Programa C
« Respuesta #5 en: 20 Diciembre 2016, 16:30 pm »

void anadirAlumno( tipoAlumno alumno[NALUMNOS],int contador){
   
   
    int numero;
    int i;
   
   
   
    printf("Introducir Nombre y Apellidos:");
   
    getchar();
    fflush(stdin);
    gets(alumno[contador].nombre);
   
   
 
   
    printf("Introducir DNI:");
    scanf("%s",&alumno[contador].identificador);
    printf("Introducir curso:");
    scanf("%d",&alumno[contador].curso);
    printf("Introducir telefono:");
    scanf("%d",&alumno[contador].telefono);

}
   
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema Programa C
« Respuesta #6 en: 20 Diciembre 2016, 18:47 pm »

Quita el getchar(); y fflush(stdin);

La primera te dará una falsa entrada por teclado y la segunda está desaconsejado ya que fflush solo se asegura para flujos de salida.

Más aún, no uses fgets. Es una antigua función que puede llegar a ser muy peligrosa. Desde el estándar C99 está desaconsejada y a partir del estándar C11 fue eliminada de la biblioteca.
En línea

pozo_23

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema Programa C
« Respuesta #7 en: 20 Diciembre 2016, 19:12 pm »

Y entonces que funcion deberia utilizar? Si utilizo fgets sin fflush y sin getchar(), cuando ejecuto el programa se salta  introducir nombre. y espera a que le de el siguiente campo
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema Programa C
« Respuesta #8 en: 20 Diciembre 2016, 19:47 pm »

Para vaciar el buffer de entrada puedes usar:
Código
  1. while(getchar()!='\n');
Para adquirir una cadena:
Código
  1. scanf("%50[^\n]", alumnos[contador].nombre);
Con esto te va a adquirir toda la cadena, con un máximo de 50 caracteres hasta que se pulse la tecla ENTER, eso es con espacios y tabulaciones.
O
Puedes usar el siguiente código:
Código
  1. fgets(alumnos[contador].nombre, 50, stdin);
Con ello adquires toda la línea, incluido el retorno de carro, con un máximo de 50 caracteres.
Con cualquiera de las dos te aseguras que no se desborda la memoria del array.
En línea

pozo_23

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema Programa C
« Respuesta #9 en: 20 Diciembre 2016, 20:47 pm »

Vale entiendo. Y para mostrar por pantalla, sigo utilizando puts? Mil gracias
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema, con programa->HELP PLZ « 1 2 »
Programación Visual Basic
newbY 12 4,438 Último mensaje 22 Noviembre 2006, 18:15 pm
por newbY
Problema programa VB
Programación Visual Basic
34Gl3 S1lV3R 2 2,142 Último mensaje 31 Enero 2008, 16:47 pm
por Chefito
Problema con un programa
Ingeniería Inversa
azazael 8 3,826 Último mensaje 4 Julio 2008, 10:23 am
por apuromafo CLS
Problema en mi programa (PIC)
Electrónica
laluchi 5 4,496 Último mensaje 30 Octubre 2008, 20:01 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines