elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  Codigo C archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Codigo C archivos  (Leído 2,424 veces)
felixgz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Codigo C archivos
« en: 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
Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. /*Definimos dimensiones para el registro de alumnos*/
  6. #define M 11 /*Definimos los renglones para el registro de alumnos*/
  7. #define N 6 /*Definimos las columnas para el registro de materias*/
  8.  
  9. typedef struct{ /*Define un nuevo tipo de dato llamado Registro
  10.                  de tipo estructura y sus punteros*/
  11. char* nombre[M];/*Nombre es un arreglo de 10 elemtos
  12.                y estos son punteros a cadenas, gurda direccion*/
  13. char* clases[N];
  14.  
  15. float notas[M][N];
  16.  
  17. }Registro;
  18.  
  19. void RegistrarAlumnos (Registro *a);
  20. void RegistrarClases (Registro *a);
  21. void RegistrarNotas(Registro *a);
  22. int validarNumero  (char buffer[]);
  23.  
  24. int main (){
  25.  
  26. Registro datos;/*Variable de tipo registro*/
  27. int i,j;/*Variable local*/
  28.  
  29. RegistrarAlumnos (&datos);/*Se le pasa la direccion de datos*/
  30. RegistrarClases (&datos);/*Se le pasa la direccion de datos*/
  31. RegistrarNotas(&datos);
  32.  
  33. for (i=1;i<M;i++){
  34. printf ("\nNOMBRE DE ALUMNO %d : %s\n",i,datos.nombre[i]);
  35.  
  36.  for (j=1;j<N;j++){
  37. printf ("%s : %.2f\n",datos.clases[j],datos.notas[i][j]);
  38. }
  39.  
  40. printf("\n\n");
  41. system ("pause");/*Pausa antes de que finalice el programa*/
  42. }
  43. }
  44.  
  45.  
  46. void RegistrarAlumnos (Registro *a){/*Arreglo para registro de alumnos*/
  47.    char buffer[50],*auxiliar;/*Buffer guarda momentaneamente el nombre del alumno y el puntero
  48.                          hace referencia a la direccion del buffer*/
  49.    int i=1;/*Nos servira para un ciclo*/
  50.  
  51.    while (i<M){
  52.     printf ("INGRESE NOMBRE Y APELLIDOS :"); fflush (stdin);gets (buffer);/*Ingreso de datos, stdin limpia entradas del teclado,
  53.                                                                      gets lee cadena de caracter y la guarda en buffer*/
  54.   auxiliar=malloc(sizeof(buffer));/*A auxiliar se le asigna el tamaño de bloque de memoria de buffer*/
  55.       if (auxiliar==NULL){/*Se utiliza en caso de que el ordenador no cuente con memoria para auxiliar*/
  56.       printf("ERROR: INSUFICIENTE MEMORIA\n\n"); system ("pause"); exit (-1);
  57.  
  58.   }
  59.   strcpy (auxiliar,buffer);
  60.   a->nombre[i]=auxiliar;/*A a se le asignara la memoria de buffer*/
  61.   i++;/*Contador para alumno*/
  62. }
  63.  
  64. }
  65.  
  66. void RegistrarClases (Registro *a){/*Arreglo para registro de materias*/
  67.  
  68. char buffer[50],*auxiliar;/*Buffer guarda momentaneamente el nombre de la materia y el puntero
  69.                          hace referencia a la direccion del buffer*/
  70.    int i=1;/*Nos servira para un ciclo*/
  71.    system("cls");
  72.  
  73.    while (i<N){
  74.     printf ("INGRESE MATERIAS %d :",i); fflush (stdin);gets (buffer);/*Ingreso de datos, stdin limpia entradas del teclado,
  75.                                                                      gets lee cadena de caracter y la guarda en buffer*/
  76.   auxiliar=malloc(sizeof(buffer));/*A auxiliar se le asigna el tamaño de bloque de memoria de buffer*/
  77.       if (auxiliar==NULL){/*Se utiliza en caso de que el ordenador no cuente con memoria para auxiliar*/
  78.       printf("ERROR: INSUFICIENTE MEMORIA\n\n"); system ("pause"); exit (-1);
  79.  
  80.   }
  81.   strcpy (auxiliar,buffer);
  82.   a->clases[i]=auxiliar;/*A a se le asignara la memoria de buffer*/
  83.   i++;/*Contador para las clases*/
  84.  
  85.   }
  86. }
  87.  
  88.   void RegistrarNotas(Registro *a){
  89.    int i,j;
  90.    char buffer[10];
  91.    system ("cls");
  92.  
  93.    for (i=1;i<M;i++){/*Se rellena el campo notas*/
  94.         printf("\nALUMNO : %s\n\n\t\tREGISTRO DE CALIFICACION\n\n",a->nombre[i]);    
  95.  
  96. for(j=1;j<N;j++){/*Ciclo para corroborar que las notas sean numeros*/
  97. do{
  98.                printf("%s : ",a->clases[j]);fflush(stdin);gets(buffer);
  99.                }while(!validarNumero(buffer));
  100. a->notas[i][j]=atof(buffer);/*Cadena de caracteres a float*/
  101.  
  102.       }
  103.   }
  104. }
  105.  
  106.  
  107.   int validarNumero(char buffer[]){
  108.  
  109.   int i=0,verdadero=1;
  110.   while ((buffer[i]!='\0')&&verdadero)
  111.   {
  112.   if((buffer[i]=='1')||(buffer[i]=='2')||(buffer[i]=='3')||(buffer[i]=='4')||
  113.    (buffer[i]=='5')||(buffer[i]=='6')||(buffer[i]=='7')||(buffer[i]=='8')||
  114.    (buffer[i]=='9')||(buffer[i]=='0')||(buffer[i]=='.'))
  115.    verdadero=1;
  116.  
  117.   else
  118.   verdadero=0;
  119.   i++;
  120.   }
  121.   return (verdadero);
  122.   }
  123.  

[MOD] Usar etiquetas GeSHi para publicar código. Gracias.


« Última modificación: 5 Septiembre 2016, 04:26 am por simorg » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Codigo C archivos
« Respuesta #1 en: 5 Septiembre 2016, 04:25 am »

Hola.

Primero que nada tienes que definir si quieres guardar la información en formato texto o en formato binario.

Para abrir el archivo tienes:

Código
  1. FILE *archivo = NULL;
  2. archivo = fopen("nombre","w");

Y para guardar los daros tienes 2 funciones fprintf o fwrite dependiendo de si es modo texto o modo.binario.

Saludos


En línea

felixgz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Codigo C archivos
« Respuesta #2 en: 5 Septiembre 2016, 04:42 am »

YA lo intente pero me da errores :/
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Codigo C archivos
« Respuesta #3 en: 5 Septiembre 2016, 05:06 am »

Que errores te da?

El detalle que como dice tu esctrutura es de apuntadores si guardas esa estructura estaras guardanfo los apuntadores y no los datos apuntados.

Tendrias que guardar registros de longitud variable y guardar los datos de uno en uno
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
codigo programa msn enviar archivos
Programación Visual Basic
juanet18 3 1,914 Último mensaje 23 Octubre 2005, 09:10 am
por NYlOn
Duda con mi codigo (Manejo de archivos)
Programación C/C++
Jesuscc29 5 2,893 Último mensaje 13 Agosto 2010, 00:42 am
por do-while
Código de generación de archivos dlc
Java
Proteus1989 3 2,995 Último mensaje 7 Febrero 2012, 19:13 pm
por Proteus1989
Archivos en los que inyectar código.
Análisis y Diseño de Malware
PROFITEROLVEINTE 0 1,984 Último mensaje 10 Julio 2012, 23:16 pm
por PROFITEROLVEINTE
Ayuda con este código de archivos
Programación C/C++
++c 2 1,781 Último mensaje 26 Agosto 2014, 21:20 pm
por ++c
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines