Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/12/2014, 05:18
antonio66
 
Fecha de Ingreso: octubre-2012
Ubicación: Murcia
Mensajes: 92
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta problemón con los punteros

Tengo el siguiente código, pero no tengo ni idea, necesito entenderlo. Agradecería que alguien me lo explicase y tener los medios necesarios, porque lo único que hago es dar vueltas. Gracias

La cabecera es:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void AñadirAlumno(char **nombre, int *edad, int **notas, int numeroAlumnos);
void MostrarAlumno(char **nombre, int *edad, int **notas, int numeroAlumnos);
void GenerarFichero(char **nombre, int *edad, int **notas, int numeroAlumnos);


y el resto de código:

#include "cabecera.h"

void main(){
char **nombre;
int *años;
int **notas;
int numeroAlumnos=0;
int fin=1;
int opcion;
while(fin==1){
printf("1. Añadir alumno\n");
printf("2. Mostrar alumno\n");
printf("3. Generar Fichero\n");
printf("4. Salir\n");
printf("Elegir opcion\n");
fflush(stdin);
scanf("%i", &opcion);
switch(opcion){
case 1:
printf("Introduce numero de alumnos:\n");
fflush(stdin);
scanf("%i", &numeroAlumnos);
nombre=(char **)malloc(numeroAlumnos*sizeof(char*));
años=(int *)malloc(numeroAlumnos*sizeof(int));
notas=(int **)malloc(numeroAlumnos*sizeof(int *));
for(int i=0;i<numeroAlumnos;i++){
nombre[i]=(char *)malloc(30*sizeof(char));
notas[i]=(int *)malloc(3*sizeof(int));
}
AñadirAlumno(nombre, años, notas, numeroAlumnos);
break;
case 2:
if(numeroAlumnos!=0){
MostrarAlumno(nombre, años, notas, numeroAlumnos);
}else{
printf("No existen alumnos\n");
}
break;
case 3:
GenerarFichero(nombre, años, notas, numeroAlumnos);
break;
case 4:
fin=0;
break;
}
free(años);
for(int i=0;i<numeroAlumnos;i++){
free(nombres[i]);
free(notas[i]);
}
free(nombres);
free(notas);
}
}
void AñadirAlumno(char **nombre, int *edad, int **notas, int numeroAlumnos){
for(int i=0;i<numeroAlumnos;i++){
printf("Introduce nombre\n");
fflush(stdin);
gets(nombre[i]);
printf("Introduce la edad\n");
fflush(stdin);
scanf("%i", &edad[i]);
for(int j=0;j<3;j++){
printf("Introduce las nota %i", j+1);
fflush(stdin);
scanf("%i", &notas[i][j]);
}
/*printf("Introduce las nota 2");
fflush(stdin);
scanf("%i", &notas[i][1]);
printf("Introduce las nota 3");
fflush(stdin);
scanf("%i", &notas[i][2]);*/
}
}
void MostrarAlumno(char **nombre, int *edad, int **notas, int numeroAlumnos){
for(int i=0;i<numeroAlumnos;i++){
printf("Nombre: %s\n", nombre[i]);
printf("Edad: %i\n", edad[i]);
printf("Nota 1: %i Nota 2: %i Nota 3: %i\n", notas[i][0],notas[i][1],notas[i][2]);
}
}
void GenerarFichero(char **nombre, int *edad, int **notas, int numeroAlumnos){
FILE *fichero;
fichero=fopen("Texto.txt","w");
if(fichero!=NULL){
for(int i=0;i<numeroAlumnos;i++){
fprintf(fichero,"Nombre: %s\n", nombre[i]);
fprintf(fichero,"Edad: %i\n", edad[i]);
fprintf(fichero,"Nota 1: %i Nota 2: %i Nota 3: %i\n", notas[i][0],notas[i][1],notas[i][2]);
fprintf(fichero,"Nota media: %f", ((float)notas[i][0]+(float)notas[i][1]+(float)notas[i][2])/3);
fprintf(fichero,"-------------------------------------------------");

}
fclose(fichero);
}
else{
printf("No se ha creado correctamente el fichero\n");
}
}