los datos se guardan bien, ya que revizo el .txt que se crea y ahí están, pero a la hora de mostrarlo por pantalla es que no va.
Modifiqué nuevamente el programa y ahora muestra los resultados, pero sólo losdel momento.
estuve analizando el programa, y si la encuesta se realiza si y solo si el usuario está registrado, eso significa que sólo se realizaría la encuesta una vez, y esos resultados se guardarían en el archivo hasta que llegara a 200.
El problema es que los resultados que me muestra son los de la sesión, es decir si hubo un voto sólo se muestra ese voto.
¿Cómo haría para poder mostrar TODOS los resultados guardados en el archivo encuesta?
Código C:
Ver original/* el cne a definido conjuntamente con el ine mediante el censo 2011 un total
de 200 votantes. Se debe realizar un registro de los mismos mediante:
cedula, nombre, apellido y edad; una vez efectuado el registro se debe llamar
a un proceso de consulta mediante la siguiente pregunta
¿es factible, económicamente hablando, la integración de Venezuela al mercosur?* 1.-Si 2.-No.
El registro debe efectuarse mediante archivos y la consulta se realizará si y sólo si
la persona se encuentra registrada en el archivo; al final del sistema se debe crear un reporte
con los resultados de la consulta.*/
#include <stdio.h>
#include <iostream>
#include <conio.h>
#define max 200
void registrarpersona();
void lista();
void resultado();
void encuesta();
int main ()
{
int opcion = 0;
for(;;)
{
lista();
switch (opcion)
{
case '1': registrarpersona();
break;
case '2': encuesta();
break;
}
}
}
void registrarpersona()
{
int edad, acumulador =0;
char nombre[20], apellido[20], cedula[20];
FILE *persona;
printf ("\n .::Introduzca los datos del votante en estricto orden::.\n"); printf ("\n .::Si desea salir del registro presione ctrl + Z::.\n"); printf ("\ncedula ----- nombre ----- apellido ----- edad\n"); scanf ("%s %s %s %d", cedula
, nombre
, apellido
, &edad
); if(edad < 18)
{
printf ("\nDebe tener 18 años para poder votar\n"); }
else
{
if ((persona
=fopen("persona.txt", "a+")) == NULL
) {
printf ("\nError al abrir el archivo\n"); }
else
{
{
fprintf (persona
, "%s %s %s %d\n", cedula
, nombre
, apellido
, edad
); scanf ("%s %s %s %d",cedula
,nombre
, apellido
, &edad
); acumulador++;
if (acumulador == 200)
{
break;
}
}
}
}
}
void encuesta()
{
int edad, n=0;
char cedulados[20],i;
char cedula[20], nombre[20], apellido[20];
int si=0, no=0, j=0;
int respuesta = 0;
FILE*persona;
FILE*encuesta;
printf ("\nIntroduzca la cedula del votante\n"); if ((persona
=fopen("persona.txt", "r+")) == NULL
) {
printf ("\nError al abrir el archivo\n");
}
else
{
{
fscanf(persona
,"%s %s %s %d",&cedula
,&nombre
, &apellido
, &edad
); if (n==0)
{
for (i=0; i<1; i++)
{
printf ("\n¿Es factible, economicamente hablando, la integracion de Venezuela al mercosur?* 1.-Si 2.-No\n"); scanf ("%d", &respuesta
); if (respuesta == 1)
{
si++;
}
else
{
if(respuesta == 2)
{
no++;
}
else
{
printf ("\nError, debe seleccionar unicamente las opciones -1- o -2-\n"); }
}
}
break;
}
}
if (n!=0)
{
printf ("\nUsted no esta registrado como votante, por lo tanto no puede ver los resultados\n"); printf ("\nSi desea realizar la encuesta debe registrarse como votante, seleccionando la opcion 1 del menu\n\n"); }
if ((encuesta
=fopen("encuesta.txt", "a+")) == NULL
) {
printf ("\nError al abrir el archivo\n"); }
else
{
for(i=0; i<1; i++)
{
fprintf (encuesta
, " .::Resultado::.\n\n"); fprintf (encuesta
, "Si -> %d ---- No -> %d\n\n", si
, no
); }
}
}
if ((encuesta
=fopen("encuesta.txt", "r+")) == NULL
) {
printf ("\nError al abrir el archivo\n"); }
else
{
{
printf ("\n .::Resultado::.\n\n"); fscanf(encuesta
,"%d %d", &si
, &no
); fscanf(encuesta
,"%d %d", &si
, &no
); }
}
}
void lista()
{
printf("\n .::Sistema de Encuesta::.\n"); printf ("1.-Registrar Votante\n"); }
En la parte de la función "encuesta" la razón por la que uso en el for i<2 en vez de i<max, es debido a que es un programa de prueba, no vale la pena guardar 200 respuestas o 200 usuarios si el programa no está perfectamente funcional.