Programación General > C/C++

 Problemas con estruturas

(1/1)

Aprendiz21Sam:
Buenas, estoy empezando con estructuras y me aparecen muchos errores nuevos para mi que no comprendo. Me gustaría que alguien me los explicara.

Este es el código:


--- Código: C ---//Descripción del ejercicio://Realizado por: Samuel Rico Jiménez//Version 1.0 /*Cabecera de las bibliotecas de C*/#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h> /*Variables globales*/int i; /*Declaración de Macors (#define)*/ /*Cabecera de nuestras funciones*/void LeerDatos (struct Alumnado *Alumno[i]);void EscribirDatos (char* DNI, char* Nombre, int Edad int Nota1, int Nota2, int Nota3); /*Programa principal*/int main(){  /*Bienvenida*/    /*Estructuras implementadas*/  struct Alumnado  {    char DNI[9];    char Nombre[20];    unsigned int Edad;    float Nota1;    float Nota2;    float Nota3;  };    /*Declaración de mis variables principales*/  struct Alumnado Alumno[2];    /*Inicialización de mis variables*/  for (i=0; i<3; i++)  {    LeerDatos(&Alumno[i];  }    for (i=0; i<3; i++)  {    EscribirDatos(Alumno[i].DNI, Alumno[i].Nombre, Alumno[i].Edad, Alumno[i].Nota1, Alumno[i].Nota2, Alumno[i].Nota3);  }      /*Declaración de mis arrays*/    /*Parámetros de entrada*/    /*Algoritmo principal*/    /*Parámetros de salida*/    /*Otros parámetros*/  getch();  return 0;} /*Implementación de mis funciones*/ /*Leer datos*/void LeerDatos (struct Alumnado *Alumno[i]){  printf("Usted es el alumno numero %d", i);  printf("nIntroduzca su nombre");  gets(Alumno->Nombre);  printf("nIndique su edad");  scanf("%d", &Alumno->Edad);  fflush(stdin);  printf("nIntroduzca su DNI");  gets(Alumno->DNI);  printf("nPor favor, indique la nota de la primera evaluacion");  scanf("%f", &Alumno->Nota1);  fflush(stdin);  printf("nPor favor, indique la nota de la segunda evaluacion");  scanf("%f", &Alumno->Nota2);  fflush(stdin);  printf("nPor favor, indique la nota de la tercera evaluacion");  scanf("%f", &Alumno->Nota3);  fflush(stdin);}  /*Escribir datos*/void EscribirDatos (char* DNI, char* Nombre, int Edad, int Nota1, int Nota2, int Nota3){  printf("Nombre: %s n", Nombre);  printf("Edad: %d n", Edad);  printf("DNI: %s n", DNI);  printf("Nota media: %f", (Nota1+Nota2+Nota3/3));}  
Estos son los errores y warnings que me da:

Estas ya las he corregido. Era porque la estructura debía ser declarada globalmente.

--- Citar ---18 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c [Warning] "struct Alumnado" declared inside parameter list
18 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c [Warning] its scope is only this definition or declaration, which is probably not what you want
19 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before "int"
 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c In function `main':
--- Fin de la cita ---

Arreglado esto, era por tipo float en vez de int.

--- Citar ---28 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before "int"
 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c In function `main':
--- Fin de la cita ---


Arreglados, el primero era problema de una coma en la funcion de esa linea, la segunda era problema en dichas líneas, donde debía cambiar "Alumnado" por "Alumno".

--- Citar ---43 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before ';' token
48 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before "Alumno"
 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c In function `LeerDatos':
72 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c `Alumnado' undeclared (first use in this function)
  (Each undeclared identifier is reported only once   for each function it appears in.)
--- Fin de la cita ---

Fallos del programa despues de compilar:

Todo arreglado

--- Citar ---1- No muestra el nombre de la primera y la tercera persona.
2- La media no funciona correctamente.[/quote

Ya está todo solucionado, se puede cerrar el hilo.

El código resuelto sería:



--- Código: C ---  //Realizado por: Samuel Rico //Version 1.0   /*Cabecera de las bibliotecas de C*/ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h>   /*Variables globales*/ int i; struct Alumnado {   char DNI[9];   char Nombre[20];   unsigned int Edad;   float Nota1;   float Nota2;   float Nota3; };   /*Declaración de Macors (#define)*/   /*Cabecera de nuestras funciones*/ void LeerDatos (struct Alumnado *Alumno); void EscribirDatos (char* DNI, char* Nombre, int Edad, float Nota1, float Nota2, float Nota3);   /*Programa principal*/ int main() {   /*Bienvenida*/      /*Estructuras implementadas*/      /*Declaración de mis variables principales*/   struct Alumnado Alumno[3];      /*Inicialización de mis variables*/   for (i=0; i<3; i++)   {     LeerDatos(&Alumno[i]);   }      for (i=0; i<3; i++)   {     EscribirDatos(Alumno[i].DNI, Alumno[i].Nombre, Alumno[i].Edad, Alumno[i].Nota1, Alumno[i].Nota2, Alumno[i].Nota3);   }         /*Declaración de mis arrays*/      /*Parámetros de entrada*/      /*Algoritmo principal*/      /*Parámetros de salida*/      /*Otros parámetros*/   getch();   return 0; }   /*Implementación de mis funciones*/   /*Leer datos*/ void LeerDatos (struct Alumnado *Alumno) {   printf("nnAlumno numero %d", i+1);   printf("nIntroduzca su nombre: ");   gets(Alumno->Nombre);   printf("nIndique su edad: ");   scanf("%d", &Alumno->Edad);   fflush(stdin);   printf("nIntroduzca su DNI: ");   gets(Alumno->DNI);   printf("nPor favor, indique la nota de la primera evaluacion: ");   scanf("%f", &Alumno->Nota1);   fflush(stdin);   printf("nPor favor, indique la nota de la segunda evaluacion: ");   scanf("%f", &Alumno->Nota2);   fflush(stdin);   printf("nPor favor, indique la nota de la tercera evaluacion: ");   scanf("%f", &Alumno->Nota3);   fflush(stdin); }     /*Escribir datos*/ void EscribirDatos (char* DNI, char* Nombre, int Edad, float Nota1, float Nota2, float Nota3) {   printf("nNombre: %s n", Nombre);   printf("Edad: %d n", Edad);   printf("DNI: %s n", DNI);   printf("nNota media: %f", (Nota1+Nota2+Nota3)/3); } 
--- Fin de la cita ---

Aprendiz21Sam:
Tengo un problema con otro ejercicio.

Esta vez el problema es que al escribir los 10 equipos con sus puntuaciones, me da un error.

Este es el código:


--- Código: C ---//Descripción del ejercicio://Realizado por://Version 1.0 /*Cabecera de las bibliotecas de C*/#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h> /*Variables globales*/int i; /*Estructuras*/struct Equipo{  char Nombre[30];  unsigned int Puntos;}; /*Declaración de Macors (#define)*/ /*Cabecera de nuestras funciones*/void LeerDatos(struct Equipo *Team);void MostrarDatos(struct Equipo Team);void OrdenarEquipos(struct Equipo *Team); /*Programa principal*/int main(){  /*Bienvenida*/  /*Estructuras*/  struct Equipo Team[10];    /*Declaración de mis variables principales*/  for(i=0; i<10; i++)  {    LeerDatos(&Team[i]);  }    /*Inicialización de mis variables*/    /*Declaración de mis arrays*/    /*Parámetros de entrada*/    /*Algoritmo principal*/  for(i=0; i<10; i++)  {    OrdenarEquipos(&Team[i]);  }    /*Parámetros de salida*/  for(i=0; i<10; i++)  {    MostrarDatos(Team[i]);  }    /*Otros parámetros*/  getch();  return 0;} /*Implementación de mis funciones*//*Función 1*/void LeerDatos(struct Equipo *Team){  printf("Nombre del equipo: ");  gets(Team->Nombre);  printf("nPuntos: ");  scanf("%d", &Team->Puntos);  fflush(stdin);} /*Función 2*/void MostrarDatos(struct Equipo Team){  printf("nNombre del equipo: %s", Team.Nombre);  printf("nPuntos obtenidos: %d", Team.Puntos);} /*Función 3*/void OrdenarEquipos(struct Equipo *Team){  int j, k, Temp;  char Nombre2[30];  for (j=1; j<10; j++)  {    for (k=10-1; k>j; k--)    {      if (Team[j-1].Puntos>Team[j].Puntos)      {        Temp=Team[j-1].Puntos;        Team[j-1].Puntos=Team[j-1].Puntos;        Team[j-1].Puntos=Temp;        strcpy(Nombre2,Team[j-1].Nombre);        strcpy(Team[j-1].Nombre, Nombre2);        strcpy(Team[j].Nombre, Nombre2);      }    }  }} 

Aprendiz21Sam:
Siento ser tan acaparador con el espacio del foro pero, he vuelto a resolver el problema de la estructura.

1- Debo cambiar "j" por "k" en la ordenación.
2- Debo pasarle la estructura sólo una vez a la función, no 10.

Código resuelto:


--- Código: C ---//Descripción del ejercicio: Ordenar equipos con sus puntuaciones.//Realizado por: Samuel Rico Jiménez//Version 1.0 /*Cabecera de las bibliotecas de C*/#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h> /*Variables globales*/int i; /*Estructuras*/struct Equipo{  char Nombre[30];  unsigned int Puntos;}; /*Declaración de Macors (#define)*/ /*Cabecera de nuestras funciones*/void LeerDatos(struct Equipo *Team);void MostrarDatos(struct Equipo Team);void OrdenarEquipos(struct Equipo *Team); /*Programa principal*/int main(){  /*Bienvenida*/  /*Estructuras*/  struct Equipo Team[10];    /*Declaración de mis variables principales*/  for(i=0; i<10; i++)  {    LeerDatos(&Team[i]);  }    /*Inicialización de mis variables*/    /*Declaración de mis arrays*/    /*Parámetros de entrada*/    /*Algoritmo principal*/   OrdenarEquipos(Team);     /*Parámetros de salida*/  for(i=0; i<10; i++)  {    MostrarDatos(Team[i]);  }    /*Otros parámetros*/  getch();  return 0;} /*Implementación de mis funciones*//*Función 1*/void LeerDatos(struct Equipo *Team){  printf("Nombre del equipo: ");  gets(Team->Nombre);  printf("nPuntos: ");  scanf("%d", &Team->Puntos);  fflush(stdin);} /*Función 2*/void MostrarDatos(struct Equipo Team){  printf("nNombre del equipo: %s", Team.Nombre);  printf("nPuntos obtenidos: %d", Team.Puntos);} /*Función 3*/void OrdenarEquipos(struct Equipo Team[]){  int j, k, Temp;  char Nombre2[30];  for (j=0; j<10; j++)  {    for (k=10-1; k>j; k--)    {      if (Team[k-1].Puntos<Team[k].Puntos)      {        Temp=Team[k-1].Puntos;        Team[k-1].Puntos=Team[k].Puntos;        Team[k].Puntos=Temp;        strcpy(Nombre2, Team[k-1].Nombre);        strcpy(Team[k-1].Nombre, Team[k].Nombre);        strcpy(Team[k].Nombre, Nombre2);      }    }  }} 

Navegación

[0] Índice de Mensajes

Ir a la versión completa