Estructuras Anidadas en C

Iniciado por Ghio97, 3 Septiembre 2019, 03:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Ghio97

Tengo un problema con mi codigo, me compila sin problemas pero no ejecuta ninguna instruccion .
alguien podria ayudarme o marcar donde me esta fallando porfavor ?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
char profesor;
int materia;
struct alumno *alumnoLi;
}listas;
struct alumno{
char *nombre;
int matricula;
char fecha[30];
};

listas *li;

void vaciar(char temp[]);
void copiar(char temp[],int i);


int main(){
int i,j;
char temp[50];
int cont=0;
char aux;

FILE *f;
f=fopen("Lista1.txt","r");

if(f==NULL){
printf("no se ha podido abrir el archivo \n ");
exit(1);
}

while(!feof(f)){
fgets(temp,50,f);
cont++;
}

rewind(f);

li=(listas*)malloc(cont*sizeof(listas));
if(li==NULL){
printf("no se ha podido reservar espacio \n");
exit (1);
}

for (i=0; !feof(f); i++){
vaciar(temp);
aux='0';

for(j=0;aux != '-';j++ ){
aux=fgetc(f);
if(aux!='-'){
temp[j]=aux;
}
}
copiar(temp,i);

fgets(temp,4,f);
li->alumnoLi[i].matricula=atoi(temp);

printf("Nombre: %s  Matricula: %i \n",li->alumnoLi[i].nombre,li->alumnoLi[i].matricula);
}


system("pause");
return 0;
}

void vaciar(char temp[]){
int i ;
for(i=0; i<50; i++){
temp[i] = '\0';
}
}

void copiar(char temp[],int i){
int N = strlen(temp) +1;
li->alumnoLi[i].nombre = (char*)malloc(N*sizeof(char));

if(li->alumnoLi[i].nombre == NULL){
printf("no se ha podido reservar meoria 2");
exit(1);
}
strcpy(li->alumnoLi[i].nombre,temp);
}


:-\  :-\

fary

Un byte a la izquierda.

MAFUS

Veo un fallo en:
//...
//leer nombre hasta final del fichero
for (i=0;!feof(f);i++){

// Conseguir los nombres de los archivos y copiarlos en las estructuras

}

// copia la matricula con 9 digitos del fichero
fgets(temp,9,f);
// atoi: pasar numeros en cadenas de caracteres a enteros
li[i].alumnoLi[i].matricula=atoi(temp);


¿Qué elemento crees que apunta i? Compruébalo.
Por otra parte: la carga del número de matrícula está fuera del for.

Ghio97

#3
Cita de: fary en  3 Septiembre 2019, 15:47 PM
Pasa el archivo Lista1.txt.


el contenido del archivo de texto (.txt) seria este:

Giovanni-201649716
Yoselin-201742587
Jose-201646812
Carlos-201623781

Ghio97

Cita de: MAFUS en  3 Septiembre 2019, 18:47 PM
Veo un fallo en:
//...
//leer nombre hasta final del fichero
for (i=0;!feof(f);i++){

// Conseguir los nombres de los archivos y copiarlos en las estructuras

}

// copia la matricula con 9 digitos del fichero
fgets(temp,9,f);
// atoi: pasar numeros en cadenas de caracteres a enteros
li[i].alumnoLi[i].matricula=atoi(temp);


¿Qué elemento crees que apunta i? Compruébalo.
Por otra parte: la carga del número de matrícula está fuera del for.

Ya actualice el codigo y corregi los errores que me mencionas pero aun no trabaja como esperaria

MAFUS

Hay que ir resolviendo poco a poco. ¿Cómo te ha quedado ahora?