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)
| | |-+  Error de estructuras en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error de estructuras en C  (Leído 5,801 veces)
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Error de estructuras en C
« en: 18 Junio 2012, 02:15 am »

Hola solicito la ayuda de los expertos esta vez para que me ayuden a encontrar el error que se encuentra en éste programa que utiliza una estructura para guardar diferentes datos, en una estructura llamada "alumno". Les solicito que le den un vistazo al programa y se den cuenta que al parecer no posee errores de sintaxis y presiento que es más un error lógico o algo por el estilo. La idea principal del programa es que en una estructura con el nombre "alumno" pueda guardar en las variables de dicha estructura los datos de nombre, calificación y su número de lista de "n" alumnos guardando en dichas variables de la estructura los "n" datos mediante un ciclo y un arreglo para poder mostrarlos en pantalla con otro ciclo. Les dejo el programa para que puedan decirme donde se encuentra el error, ya que el programa es compilado y ejecutado, sin embargo muestra un error en el ejecutable. Gracias a todos de antemano.
Código:
#include <stdio.h>
#include <stdlib.h>

struct alumno{
        char nombre;
        int calificacion;
        int lista;
    };

int main(){
struct alumno ALUMNO[100];
int n,l;
printf("Introduce el numero de alumnos que se tomaran los datos\n");
scanf("%d",&n);                                                                                                                   
for(l=0;l<n;l++){
                 printf("Introduce el nombre del alumno\n");
                 scanf("%s",&ALUMNO[l].nombre);
                 printf("Introduce la calificacion del alumno\n");
                 scanf("%d",&ALUMNO[l].calificacion);
                 printf("Introduce el numero de lista del alumno\n");
                 scanf("%d",&ALUMNO[l].lista);
                 }
for(l=0;l<n;l++){
                   printf("El nombre del alumno es: %s\n",ALUMNO[l].nombre);
                   printf("La calificacion del alumno es: %d\n",ALUMNO[l].calificacion);
                   printf("El numero de lista es: %d\n",ALUMNO[l].lista);
                   }

system("PAUSE");

  return 0;
}


En línea

STANHMAL

Desconectado Desconectado

Mensajes: 107


ςταηhmαl - hηαfε


Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #1 en: 18 Junio 2012, 02:38 am »

Hola que tal, el problema esta en la estructura, ya que tienes nombre para que solo guarde un carácter.

error :

Código
  1. struct alumno{
  2.        char nombre;
  3.        ...
  4.    };
  5.  

solucion :

Código
  1. struct alumno{
  2.        char nombre[20];
  3.        ...
  4.    };
  5.  

y el otro problema es que cuando lees la cadena se la mandas con el ampersand &,a para las cadenas no es necesario.

error :

Código
  1. ...
  2. printf("Introduce el nombre del alumno\n");
  3. scanf("%s",&ALUMNO[l].nombre);
  4. ...
  5.  

solución :

Código
  1. ...
  2. printf("Introduce el nombre del alumno\n");
  3. scanf("%s",ALUMNO[l].nombre);
  4. ...
  5.  

$4!u2


En línea

Power Metal vs Reggaeton



Que es mi ordenador mi tesoro que todo el mundo ha de temer. Mi ley, el ratón y el módem. Mi única patria, la red
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #2 en: 18 Junio 2012, 02:40 am »

Citar
Hola,

Por encima y sin poder compilar (no estoy en mi PC) puedo decirte que el problema seguramente se encuentre en el campo nombre en la estructura alumno, en realidad debería ser un arreglo de caracteres.

Código
  1. char nombre[10];
o bien de manera dinámica reservando memoria:
Código
  1. char * nombre;

Y creo que en el scanf deberías pasar sin el "&", pero no tengo compilador para confirmarlo.

Un saludo,
Iván Portilla.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

STANHMAL me la ganaste! Además de que me certificaste estar en lo correcto.
En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #3 en: 18 Junio 2012, 04:30 am »

Hola que tal, el problema esta en la estructura, ya que tienes nombre para que solo guarde un carácter.

error :

Código
  1. struct alumno{
  2.        char nombre;
  3.        ...
  4.    };
  5.  

solucion :

Código
  1. struct alumno{
  2.        char nombre[20];
  3.        ...
  4.    };
  5.  

y el otro problema es que cuando lees la cadena se la mandas con el ampersand &,a para las cadenas no es necesario.

error :

Código
  1. ...
  2. printf("Introduce el nombre del alumno\n");
  3. scanf("%s",&ALUMNO[l].nombre);
  4. ...
  5.  

solución :

Código
  1. ...
  2. printf("Introduce el nombre del alumno\n");
  3. scanf("%s",ALUMNO[l].nombre);
  4. ...
  5.  

$4!u2

Muchas gracias por tu respuesta STANHMAL, he corregido el error y ahora arroja resultados pero tengo una nueva problemática con el programa: Te dejo el código modificado para que compruebes que he cambiado lo que señalas:
Código:
#include <stdio.h>
#include <stdlib.h>

struct alumno{
        char nombre[100];
        int calificacion[100];
        int lista[100];
    };

int main(){
struct alumno ALUMNO[100];
int n,l;
printf("Introduce el numero de alumnos que se tomaran los datos\n");
scanf("%d",&n);                                                                                                                   
for(l=0;l<n;l++){
                 printf("Introduce el nombre del alumno\n");
                 scanf("%s",ALUMNO[l].nombre);
                 printf("Introduce la calificacion del alumno\n");
                 scanf("%d",ALUMNO[l].calificacion);
                 printf("Introduce el numero de lista del alumno\n");
                 scanf("%d",ALUMNO[l].lista);
                 }
for(l=0;l<n;l++){
                   printf("El nombre del alumno es: %s\n",ALUMNO[l].nombre);
                   printf("La calificacion del alumno es: %d\n",ALUMNO[l].calificacion);
                   printf("El numero de lista es: %d\n",ALUMNO[l].lista);
                   }

system("PAUSE");

  return 0;
}
El problema ahora reside que al ejecutarse el programa lo que imprime de la variable "ALUMNO[l].calificacion" y la variable "ALUMNO[l].lista" es al parecer la dirección de memoria de dicha variable y no el valor que mandé guardar en el ciclo anterior con el "scanf". No se porque ocurre esto, gracias por todo espero que me puedan ayudar.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Error de estructuras en C
« Respuesta #4 en: 18 Junio 2012, 04:37 am »

Hola!
Citar
El problema ahora reside que al ejecutarse el programa lo que imprime de la variable "ALUMNO[l].calificacion" y la variable "ALUMNO[l].lista" es al parecer la dirección de memoria de dicha variable y no el valor que mandé guardar en el ciclo anterior con el "scanf"

mira como declaras tus variables haber si te das cuenta:
Citar
int calificacion[100];
        int lista[100];


Saludos
En línea

Ahorrate una pregunta, lee el man
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #5 en: 18 Junio 2012, 04:46 am »

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

STANHMAL me la ganaste! Además de que me certificaste estar en lo correcto.

Hola gracias por responder, sobre lo que dijiste de usar una variable tipo apuntador en la estructura ¿Cómo debería darle dimensión? ¿Sería darle dimensión con "malloc" a la variable "nombre" pero ya en el "main"? Me gustaría saber como lo harías, gracias por todo.
En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #6 en: 18 Junio 2012, 04:48 am »

Hola gracias por responder, sobre lo que dijiste de usar una variable tipo apuntador en la estructura ¿Cómo debería darle dimensión? ¿Sería darle dimensión con "malloc" a la variable "nombre" pero ya en el "main"? Me gustaría saber como lo harías, gracias por todo.
Gracias he encontrado el error, de esta forma me ha corrido sin problemas:
Código:
struct alumno{
        char nombre[100];
        int calificacion;
        int lista;
    };
En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #7 en: 18 Junio 2012, 06:17 am »

Hola a todos gracias por su ayuda, se ha logrado ejecutar el programa a la perfección. Sin embargo el programa que ocupo esta un tanto lejos de estar terminado, ya que aparte de esos datos que se han puesto; ocupo ingresar la fecha de nacimiento de estos alumnos. Para ello he decidido poner una nueva variable en la estructura llamada "fecha"; y a su vez una nueva variable de la estructura llamada "FECHA" como un arreglo de 3 dimensiones se podría decir. Para que al ingresar los datos que corresponden a la fecha los guarde en dicho arreglo en la variable de la estructura de la siguiente manera.
Código:
#include <stdio.h>
#include <stdlib.h>

struct alumno{
        char nombre[100];
        int calificacion;
        int lista;
        int fecha;
    };

int main(){
struct alumno ALUMNO[100];
struct alumno FECHA[100][100][100];
int n,l,i,j,k;
printf("Introduce el numero de alumnos que se tomaran los datos\n");
scanf("%d",&n);                                                                                                                   
for(l=0;l<n;l++){
                 printf("Introduce el nombre del alumno\n");
                 scanf("%s",ALUMNO[l].nombre);
                 printf("Introduce la calificacion del alumno\n");
                 scanf("%d",&ALUMNO[l].calificacion);
                 printf("Introduce el numero de lista del alumno\n");
                 scanf("%d",&ALUMNO[l].lista);
                 }
for(i=0;i<n;i++){
                 for(j=0;j<n;j++){
                                  for(k=0;k<n;k++){
                                                   printf("Inttoduce la fecha de nacimiento del alumno con el formato DD-MM-ANO");
                                                   scanf("%d-%d-%d",&FECHA[i][j][k].fecha);
                                                   }
                                  }
                 }
                                                                 
for(l=0;l<n;l++){
                   printf("El nombre del alumno es: %s\n",ALUMNO[l].nombre);
                   printf("La calificacion del alumno es: %d\n",ALUMNO[l].calificacion);
                   printf("El numero de lista es: %d\n",ALUMNO[l].lista);
                   }


system("PAUSE");

  return 0;
}

Tengo duda sobre la declaración de la variable "fecha" en la estructura ya que no se maneja como un arreglo. Agradecería su ayuda ya que lo compila pero al ejecutar marca un error ".exe".Gracias por todo.
En línea

STANHMAL

Desconectado Desconectado

Mensajes: 107


ςταηhmαl - hηαfε


Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #8 en: 18 Junio 2012, 15:47 pm »

Holas, tu error esta acá :

Código
  1. ...
  2. struct alumno FECHA[100][100][100];
  3. ...
  4. scanf("%d-%d-%d",&FECHA[i][j][k].fecha);
  5. ...
  6.  

utilizas la struct de alumno la cual solo tiene 1 int destinado para la fecha y necesitas guardar 3, te recomiendo que hagas otra estructura especial para la fecha, algo así:

Código
  1. struct fecha{
  2.    int dia;
  3.    int mes;
  4.    int año;
  5. }
  6.  

con eso podes eliminar esta parte del código :

Código
  1. for(i=0;i<n;i++){
  2.                 for(j=0;j<n;j++){
  3.                                  for(k=0;k<n;k++){
  4.                                                   printf("Inttoduce la fecha de nacimiento del alumno con el formato DD-MM-ANO");
  5.                                                   scanf("%d-%d-%d",&FECHA[i][j][k].fecha);
  6.                                                   }
  7.                                  }
  8.                 }
  9.  

y podes juntar la parte en la que se lee la fecha en el for donde pides los datos de alumno.


$4!u2
En línea

Power Metal vs Reggaeton



Que es mi ordenador mi tesoro que todo el mundo ha de temer. Mi ley, el ratón y el módem. Mi única patria, la red
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Error de estructuras en C
« Respuesta #9 en: 20 Junio 2012, 06:26 am »

Hola a todos, gracias por su ayuda en la realización de éste programa que tiene como objetivo pedir los datos de "n" personas; entre esos datos su fecha de nacimiento y ordenar los datos de acuerdo a su fecha de nacimiento. Les dejo ahora el código terminado para que sea de apoyo a la comunidad;

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
        char nombre[100];
        int calificacion;
        int lista;
        int c;
        int dia;
        int mes;
        int ano;
       } alumno;


int main(){
alumno *ALUMNO;
alumno aux;
int n,l,i,j,m;
printf("Introduce el numero de alumnos que se tomaran los datos\n");
scanf("%d",&n);
ALUMNO=(alumno *) malloc (sizeof(alumno)*n);                                                                                                                   
for(l=0;l<n;l++){
                 printf("Introduce el nombre del alumno %d\n",l+1);
                 scanf("%s",ALUMNO[l].nombre);
                 printf("Introduce la calificacion del alumno %d\n",l+1);
                 scanf("%d",&ALUMNO[l].calificacion);
                 printf("Introduce el numero de lista del alumno %d\n",l+1);
                 scanf("%d",&ALUMNO[l].lista);
                 printf("Introduce los datos de la fecha de nacimiento del alumno %d\n",l+1);
                 printf("Introduce el dia\n");
                 scanf("%d",&ALUMNO[l].dia);
                 printf("Introduce el mes\n");
                 scanf("%d",&ALUMNO[l].mes);
                 printf("Introduce el año\n");
                 scanf("%d",&ALUMNO[l].ano);
                 }
                 
                                                                 
for(l=0;l<n;l++){
                   printf("El nombre del alumno %d es: %s\n",l+1,ALUMNO[l].nombre);
                   printf("La calificacion del alumno %d es: %d\n",l+1,ALUMNO[l].calificacion);
                   printf("El numero de lista del alumno %d es: %d\n",l+1,ALUMNO[l].lista);
                   printf("La fecha de nacimiento del alumno %d es: %d-%d-%d\n",l+1,ALUMNO[l].dia,ALUMNO[l].mes,ALUMNO[l].ano);
                   }
for(l=0;l<n;l++){
                 ALUMNO[l].c=(ALUMNO[l].ano*10000)+(ALUMNO[l].mes*100)+(ALUMNO[l].dia*1);
                 }
for(l=0;l<n;l++){
                 for(m=l+1;m<=n;m++)
                                    {
                                    if(ALUMNO[l].c>ALUMNO[m].c){
                                               aux.c=ALUMNO[l].c;
                                               strcpy(aux.nombre,ALUMNO[l].nombre);
                                               aux.calificacion=ALUMNO[l].calificacion;
                                               aux.lista=ALUMNO[l].lista;
                                               aux.dia=ALUMNO[l].dia;
                                               aux.mes=ALUMNO[l].mes;
                                               aux.ano=ALUMNO[l].ano;
                                               
                                               ALUMNO[l].c=ALUMNO[m].c;
                                               strcpy(ALUMNO[l].nombre,ALUMNO[m].nombre);
                                               ALUMNO[l].calificacion=ALUMNO[m].calificacion;
                                               ALUMNO[l].lista=ALUMNO[m].lista;
                                               ALUMNO[l].dia=ALUMNO[m].dia;
                                               ALUMNO[l].mes=ALUMNO[m].mes;
                                               ALUMNO[l].ano=ALUMNO[m].ano;
                                               
                                               ALUMNO[m].c=aux.c;
                                               strcpy(ALUMNO[m].nombre,aux.nombre);
                                               ALUMNO[m].calificacion=aux.calificacion;
                                               ALUMNO[m].lista=aux.lista;
                                               ALUMNO[m].dia=aux.dia;
                                               ALUMNO[m].mes=aux.mes;
                                               ALUMNO[m].ano=aux.ano;
                                                                     }
                                               }
                 }
for(l=0;l<n;l++){
                 printf("\n%s:\n\tNo. de lista: %d\n\tCalificación: %d\n\tAño: %d\n\tMes: %d\n\tDia: %d\n",ALUMNO[l].nombre,ALUMNO[l].lista,ALUMNO[l].calificacion,ALUMNO[l].ano,ALUMNO[l].mes,ALUMNO[l].dia);
                 }

free(ALUMNO);

system("PAUSE");

return 0;
}
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
estructuras selectivas
.NET (C#, VB.NET, ASP)
leliCabello 3 7,275 Último mensaje 29 Marzo 2010, 20:26 pm
por leliCabello
Estructuras.....
Programación C/C++
Rodri 1 2,516 Último mensaje 6 Octubre 2011, 19:46 pm
por satu
Error al grabar en estructuras
Programación C/C++
andoporto 0 1,248 Último mensaje 19 Febrero 2015, 22:16 pm
por andoporto
Error al crear punteros a estructuras.
Programación C/C++
NikNitro! 2 2,021 Último mensaje 5 Marzo 2015, 17:11 pm
por NikNitro!
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines