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
[MOD] Usar etiquetas GeSHi para publicar código. Gracias.
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
Código (c) [Seleccionar]
#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]);
}
printf("\n\n");
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*/
printf("ERROR: INSUFICIENTE MEMORIA\n\n"); system ("pause"); exit (-1);
}
strcpy (auxiliar,buffer);
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*/
system("cls");
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*/
printf("ERROR: INSUFICIENTE MEMORIA\n\n"); system ("pause"); exit (-1);
}
strcpy (auxiliar,buffer);
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];
system ("cls");
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.