Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - felixgz

#1
Dudas Generales / Codigo C archivos
5 Septiembre 2016, 04:16 AM
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]);
}

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.
#2
Básicamente el programa lee una matriz que se encuentra en un archivo texto, pero ahora quiero agregar la suma por renglones y también por columnas pero guardarlo en un archivo nuevo.

Lo que no entiendo es como puedo leer mi archivo e introducir los valores y guardarlo en otro.

mi código es este:

#include<stdio.h>

int main(){
   
   char c;
   FILE *f;//f es nuestro fichero
   
   f = fopen ("Matriz.txt", "r");
   
if (f == NULL){
   printf("No se a podido abrir el fichero.\n");
   exit (1);
}

while (c != EOF){
   c = fgetc (f);
   printf ("%c",c);
}
   printf ("\n");
   fclose (f);