Hola hice un programa que realiza el registro de calificaciones de 10 alumnos con 5 materias.
Pero apenas voy comenzando a tocar el tema de archivos y no se como guardar los datos que introduje en la ejecución del programa en un archivo de .txt
¿Alguien me puede ayudar?
Este es mi código
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Definimos dimensiones para el registro de alumnos*/
#define M 11 /*Definimos los renglones para el registro de alumnos*/
#define N 6 /*Definimos las columnas para el registro de materias*/
typedef struct{ /*Define un nuevo tipo de dato llamado Registro
de tipo estructura y sus punteros*/
char* nombre[M];/*Nombre es un arreglo de 10 elemtos
y estos son punteros a cadenas, gurda direccion*/
char* clases[N];
float notas[M][N];
}Registro;
void RegistrarAlumnos (Registro *a);
void RegistrarClases (Registro *a);
void RegistrarNotas(Registro *a);
int validarNumero (char buffer[]);
int main (){
Registro datos;/*Variable de tipo registro*/
int i,j;/*Variable local*/
RegistrarAlumnos (&datos);/*Se le pasa la direccion de datos*/
RegistrarClases (&datos);/*Se le pasa la direccion de datos*/
RegistrarNotas(&datos);
for (i=1;i<M;i++){
printf ("\nNOMBRE DE ALUMNO %d : %s\n",i
,datos.
nombre[i
]);
for (j=1;j<N;j++){
printf ("%s : %.2f\n",datos.
clases[j
],datos.
notas[i
][j
]); }
system ("pause");/*Pausa antes de que finalice el programa*/ }
}
void RegistrarAlumnos (Registro *a){/*Arreglo para registro de alumnos*/
char buffer[50],*auxiliar;/*Buffer guarda momentaneamente el nombre del alumno y el puntero
hace referencia a la direccion del buffer*/
int i=1;/*Nos servira para un ciclo*/
while (i<M){
printf ("INGRESE NOMBRE Y APELLIDOS :"); fflush (stdin
);gets
(buffer
);/*Ingreso de datos, stdin limpia entradas del teclado, gets lee cadena de caracter y la guarda en buffer*/
auxiliar
=malloc(sizeof(buffer
));/*A auxiliar se le asigna el tamaño de bloque de memoria de buffer*/ if (auxiliar==NULL){/*Se utiliza en caso de que el ordenador no cuente con memoria para auxiliar*/
}
a->nombre[i]=auxiliar;/*A a se le asignara la memoria de buffer*/
i++;/*Contador para alumno*/
}
}
void RegistrarClases (Registro *a){/*Arreglo para registro de materias*/
char buffer[50],*auxiliar;/*Buffer guarda momentaneamente el nombre de la materia y el puntero
hace referencia a la direccion del buffer*/
int i=1;/*Nos servira para un ciclo*/
while (i<N){
printf ("INGRESE MATERIAS %d :",i
); fflush (stdin
);gets
(buffer
);/*Ingreso de datos, stdin limpia entradas del teclado, gets lee cadena de caracter y la guarda en buffer*/
auxiliar
=malloc(sizeof(buffer
));/*A auxiliar se le asigna el tamaño de bloque de memoria de buffer*/ if (auxiliar==NULL){/*Se utiliza en caso de que el ordenador no cuente con memoria para auxiliar*/
}
a->clases[i]=auxiliar;/*A a se le asignara la memoria de buffer*/
i++;/*Contador para las clases*/
}
}
void RegistrarNotas(Registro *a){
int i,j;
char buffer[10];
for (i=1;i<M;i++){/*Se rellena el campo notas*/
printf("\nALUMNO : %s\n\n\t\tREGISTRO DE CALIFICACION\n\n",a
->nombre
[i
]);
for(j=1;j<N;j++){/*Ciclo para corroborar que las notas sean numeros*/
do{
printf("%s : ",a
->clases
[j
]);fflush
(stdin
);gets
(buffer
); }while(!validarNumero(buffer));
a
->notas
[i
][j
]=atof(buffer
);/*Cadena de caracteres a float*/
}
}
}
int validarNumero(char buffer[]){
int i=0,verdadero=1;
while ((buffer[i]!='\0')&&verdadero)
{
if((buffer[i]=='1')||(buffer[i]=='2')||(buffer[i]=='3')||(buffer[i]=='4')||
(buffer[i]=='5')||(buffer[i]=='6')||(buffer[i]=='7')||(buffer[i]=='8')||
(buffer[i]=='9')||(buffer[i]=='0')||(buffer[i]=='.'))
verdadero=1;
else
verdadero=0;
i++;
}
return (verdadero);
}
[MOD] Usar etiquetas GeSHi para publicar código. Gracias.