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
Ir a la versión completa