Autor
|
Tema: Problema con cadena de caracteres y estructura (Novato) (Leído 1,627 veces)
|
alejandrodiaz
Desconectado
Mensajes: 12
|
Primero quisiera aclarar que soy novato programando, estoy apenas aprendiendo punteros y por eso no se lo he integrado al siguiente codigo. Estoy intentanto realizar un programa para el control de notas. Ya logré fijar y mostrar los nombres y apellidos de los estudiantes, luego introduje los nombres de las materias en una variable char en el Main, para luego copiarlos con strcpy a cada estructura (Me imagino que hay mejores formas de hacerlo pero esta es la que mi ignorancia me permite, por ahora) Mi problema es que al introducir las notas, el nombre de la primera materia se mantiene pero el resto de los nombres se pierde, mostrandome ASCII. Verifiqué antes de llegar a esa parte del código y los nombres se guardan bien pero despues de alli se daña. Que consejos me dan? Aca el código: #include<stdio.h> #include<string.h> #define MAX 10 typedef struct asignaturas{ char nombre[MAX]; int nota[4]; }asignatura; typedef struct estudiantes{ char nombre[MAX]; char apellido[MAX]; asignatura materia[3]; }escolar; escolar DatosAlum(); escolar IntroNota(int cant_alum,int indice); int main(){ int cant_alum, i,j; char nom_mate[3][MAX]; printf("Introduzca cantidad de alumnos: \n"); escolar alumno[cant_alum]; //Declarando variable tipo struct "escolar" for(i=0;i<cant_alum;i++){ printf("Alumno nro %d: \n", i +1); alumno[i]=DatosAlum(); //Introduciendo nombres y apellidos de alumnos } printf("Introduzca nombre de materias: \n"); for(i=0;i<3;i++){ printf("Materia nro %d: ",i +1); } for(i=0;i<cant_alum;i++){ for(j=0;j<3;j++){ strcpy(alumno [i ]. materia[j ]. nombre,nom_mate [j ]); //Aca copìo y pego los nombres en las estructuras. } } printf("Introduzca notas: \n"); for(i=0;i<cant_alum;i++){ printf("Alumno: %s %s\n",alumno [i ]. nombre,alumno [i ]. apellido); for(j=0;j<3;j++){ printf("Materia: %s \n",alumno [i ]. materia[j ]. nombre); //Aqui se daña mi codigo //El primer nombre se imprime bien, el resto sale mal. alumno[i]=IntroNota(cant_alum,j); } } return 0; } escolar DatosAlum(){ escolar alumno; return alumno; } escolar IntroNota(int cant_alum,int indice){ escolar alumno; int i; for(i=0;i<4;i++){ scanf("%d",&alumno. materia[indice ]. nota[i ]); } return alumno; }
|
|
« Última modificación: 6 Enero 2016, 17:48 pm por alejandrodiaz »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Algunas cosillas:
El uso de gets te puede llevar a problemas si introducen un dato mas largo de lo que puedes alojar.
Para usaro getch() debes introducir la cabecera conio.h, que es una librería que solo usa el compilador de Borland, aunque hay librerías independientes que ofrecen compatibilidad, no está bien visto el usarla. Está tan mal vista o mas que goto.
fflush(stdin) es muy mal hábito. No tendrá el efecto deseado en muchos compiladores, por lo que debes encontrar otra forma de vaciar el buffer.
La función IntroNota() está mal diseñada. Pides la cantidad de alumnos con cant_alum, pero no haces nada con ella. Regresas un dato de tipo alumno, rellenado con las notas, eso sí, pero que no tiene nombre y con esto machacas al alumno que está en main(): ahora tendrá las notas, pero los nombres, apellidos y los nombres de las materias son sustituidos por basura. Posibles soluciones: punteros y pasar el alumno por referencia, pero no has aprendido a usarlos aún. Podrías hacer un array de alumnos global, pero entonces no podrías indicar en tiempo de ejecución cuántos alumnos tienes. Tu única solución, por ahora, es que el código para introducir las notas esté dentro de main() así el programa te funcionará.
|
|
|
En línea
|
|
|
|
alejandrodiaz
Desconectado
Mensajes: 12
|
Muchas gracias por la respuesta, tomaré en cuenta todo lo que has dicho referente a l gets, getch,fflush.
Hice lo que dijiste, realice todo en main y funcionó correctamente, solo hice una función extra para imprimir. Seguiré estudiando punteros para hacerlo como dices, ya que de esa forma es que quiero que me quede el código.
Gracias!
|
|
|
En línea
|
|
|
|
lfgmespino
Desconectado
Mensajes: 12
|
Yo lo he resuelto así, pero tiene punteros, claro. #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 10 typedef struct asignaturas{ char nombre[MAX]; int nota[4]; }asignatura; typedef struct estudiantes{ char nombre[MAX]; char apellido[MAX]; asignatura materia[3]; }escolar; void DatosAlum(escolar *alumno); void IntroNota(asignatura *materia, int indice); int main(){ int cant_alum, i,j; char nom_mate[3][MAX]; escolar *alumno; printf("Introduzca cantidad de alumnos: \n"); alumno = (escolar *) malloc(sizeof(escolar ) *cant_alum ); //Declarando variable tipo struct "escolar" for(i=0;i<cant_alum;i++) { printf("Alumno nro %d: \n", i +1); DatosAlum(&alumno[i]); //Introduciendo nombres y apellidos de alumnos } printf("Introduzca nombre de materias: \n"); for(i=0;i<3;i++){ printf("Materia nro %d: ",i +1); } for(i=0;i<cant_alum;i++) { for(j=0;j<3;j++) { strcpy(alumno [i ]. materia[j ]. nombre,nom_mate [j ]); //Aca copìo y pego los nombres en las estructuras. } } printf("Introduzca notas: \n"); for( i=0; i<cant_alum; i++){ printf("Alumno: %s %s\n", alumno [i ]. nombre, alumno [i ]. apellido); for( j=0; j<3; j++) { printf("Materia: %s \n",alumno [i ]. materia[j ]. nombre); IntroNota( alumno[i].materia[i].nota, j); printf("\nvalor de j= %d", j ); } } return 0; } void DatosAlum(escolar *alumno){ } void IntroNota(asignatura *materia, int indice) { int i; for( i=0; i<4; i++) { scanf("%d", &(materia [indice ]. nota[i ]) ); } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con el tamaño de una estructura y/o cadena en Dev-C++
Programación C/C++
|
BlerofonT
|
4
|
3,460
|
8 Abril 2018, 10:52 am
por eduu15
|
|
|
Ayuda!!! Problema con cadena de caracteres
Programación C/C++
|
mathias_vg
|
5
|
3,956
|
26 Junio 2013, 19:47 pm
por leosansan
|
|
|
Problema con cadena de caracteres en C.
« 1 2 »
Programación C/C++
|
GilbertoBrewer
|
10
|
4,369
|
21 Noviembre 2014, 06:56 am
por GilbertoBrewer
|
|
|
Problema pegar caracteres en cadena.
Programación C/C++
|
Kaxperday
|
1
|
1,497
|
15 Febrero 2015, 21:15 pm
por engel lex
|
|
|
Duda sobre problema de cadena de caracteres.
Programación C/C++
|
rafacg96
|
1
|
1,460
|
2 Diciembre 2015, 07:11 am
por class_OpenGL
|
|