Hola.
Tengo que hacer un programa que realiza un encuesta, seleccionando aleatoriamente una pregunta de un documento de texto. Os enseño lo que llevo:
/* Trabajo obligatorio. Estructura de datos. Francisco Javier Cámara Acedo*/
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define BUFFER 81 /*Longitud de línea*/
int main(void){
/* Aquí defino las variables, donde conta,contb,contc y contd contarán las
veces que se marcarán las respuestas a,b,c y d respectivamente. nusu y npreg
hacen referencia al número de usuarios que harán la encuesta, así como el
número de preguntas que tendrá cada uno.*/
int conta,contb,contc,contd,nusu,npreg,num,contusua,contpreg,eleccion,suma;
int i;
/* Defino los porcentajes de las respuestas como números reales*/
float porcenta,porcentb,porcentc,porcentd;
char v[5];
char Texto[BUFFER];
/* A continuación, indico y abro el archivo que contiene las preguntas*/
FILE *archivo;
char* preguntas = "C:\\preguntas.txt";
archivo=fopen(preguntas,"r");
/* Utilizo un comprobador para ver si he abierto bien el fichero*/
if(archivo==NULL)
{
printf("\nNo se pudo abrir el fichero...\n");
}else{
printf("\nEl fichero se abrió correctamente\n");
fclose(archivo);
}
i=0;
/* Con un bucle while, recupero la línea de caracteres del archivo y mientras
esta sea distinta de NULL, entonces el bucle se seguirá ejecutando*/
while (fgets(Texto,BUFFER,archivo)!=NULL){
/* Aquí lo que hago es que guardo en un vector que he definido previamente como
variable caracter lo que hay en la determinada línea del archivo*/
scanf("%s",&v);
printf("Pregunta %s\n",v);
i++;
}
/* Pregunto al usuario cuántos usuarios realizarán la encuesta*/
printf("Dime el numero de usuarios que realizarán la encuesta\n");
scanf("%d",&nusu);
/*Pregunto el número de preguntas que tendrá la encuesta*/
printf("Dame el numero de preguntas que tendrá la encuesta\n");
scanf("%d",&npreg);
/* Inicializo a cero todos los contadores de las respuestas*/
conta=0;
contb=0;
contc=0;
contd=0;
/*Inicializo a 0 el número de usuarios que realizarán la encuesta*/
contusua=0;
/* Ahora mediante un bucle while realizará la encuesta siempre y cuando no se
hayan completado el número de usuarios que se indicó anteriormente*/
while(contusua<nusu){
contusua=contusua+1;
/*Inicializo a 0 el número de preguntas*/
contpreg=0;
while(contpreg<npreg){
contpreg=contpreg+1;
/*Mediante la función rand, genero un número aleatorio entre 1 y el valor
que se haya añadido de npreg. Nota: Al usar la función módulo, el número que
se obtiene, será entero*/
num=1+rand()%(npreg-1);
printf("La pregunta es %s\n",v[num]);
printf("Elige la respuesta\n");
/* Ahora muestro las opciones y pido al usuario que elija una*/
printf("1) Muy bueno\n");
printf("2) Bueno\n");
printf("3) Malo\n");
printf("4) Muy malo\n");
printf("Marca 1,2,3 o 4\n");
scanf("%s",&eleccion);
/* En función de qué respuesta elija, o bien conta,contb,contc o contd, se
incrementarán en una unidad*/
if (eleccion=1){
conta=conta+1;
}else if (eleccion=2){
contb=contb+1;
}else if(eleccion=3){
contc=contc+1;
}else if(eleccion=4){
contd=contd+1;
}
}
contusua=contusua+1;
}
/* Una vez que hemos realizado todo, hallamos las estadísticas*/
/*Porcentaje de respuestas dadas*/
suma=conta+contb+contc+contd;
porcenta=(conta/suma)*100;
porcentb=(contb/suma)*100;
porcentc=(contc/suma)*100;
porcentd=(contd/suma)*100;
printf("El porcentaje de a es: %d\n",porcenta);
printf("El porcentaje de b es: %d\n",porcentb);
printf("El porcentaje de c es: %d\n",porcentc);
printf("El porcentaje de d es: %d\n",porcentd);
return 0;
getch();
}
Yo creo que el problema lo tengo en la función fgets. A ver si me podéis ayudar por favor, para que me imprima por pantalla la pregunta
Un saludo y gracias de antemano.
Tengo que hacer un programa que realiza un encuesta, seleccionando aleatoriamente una pregunta de un documento de texto. Os enseño lo que llevo:
/* Trabajo obligatorio. Estructura de datos. Francisco Javier Cámara Acedo*/
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define BUFFER 81 /*Longitud de línea*/
int main(void){
/* Aquí defino las variables, donde conta,contb,contc y contd contarán las
veces que se marcarán las respuestas a,b,c y d respectivamente. nusu y npreg
hacen referencia al número de usuarios que harán la encuesta, así como el
número de preguntas que tendrá cada uno.*/
int conta,contb,contc,contd,nusu,npreg,num,contusua,contpreg,eleccion,suma;
int i;
/* Defino los porcentajes de las respuestas como números reales*/
float porcenta,porcentb,porcentc,porcentd;
char v[5];
char Texto[BUFFER];
/* A continuación, indico y abro el archivo que contiene las preguntas*/
FILE *archivo;
char* preguntas = "C:\\preguntas.txt";
archivo=fopen(preguntas,"r");
/* Utilizo un comprobador para ver si he abierto bien el fichero*/
if(archivo==NULL)
{
printf("\nNo se pudo abrir el fichero...\n");
}else{
printf("\nEl fichero se abrió correctamente\n");
fclose(archivo);
}
i=0;
/* Con un bucle while, recupero la línea de caracteres del archivo y mientras
esta sea distinta de NULL, entonces el bucle se seguirá ejecutando*/
while (fgets(Texto,BUFFER,archivo)!=NULL){
/* Aquí lo que hago es que guardo en un vector que he definido previamente como
variable caracter lo que hay en la determinada línea del archivo*/
scanf("%s",&v);
printf("Pregunta %s\n",v);
i++;
}
/* Pregunto al usuario cuántos usuarios realizarán la encuesta*/
printf("Dime el numero de usuarios que realizarán la encuesta\n");
scanf("%d",&nusu);
/*Pregunto el número de preguntas que tendrá la encuesta*/
printf("Dame el numero de preguntas que tendrá la encuesta\n");
scanf("%d",&npreg);
/* Inicializo a cero todos los contadores de las respuestas*/
conta=0;
contb=0;
contc=0;
contd=0;
/*Inicializo a 0 el número de usuarios que realizarán la encuesta*/
contusua=0;
/* Ahora mediante un bucle while realizará la encuesta siempre y cuando no se
hayan completado el número de usuarios que se indicó anteriormente*/
while(contusua<nusu){
contusua=contusua+1;
/*Inicializo a 0 el número de preguntas*/
contpreg=0;
while(contpreg<npreg){
contpreg=contpreg+1;
/*Mediante la función rand, genero un número aleatorio entre 1 y el valor
que se haya añadido de npreg. Nota: Al usar la función módulo, el número que
se obtiene, será entero*/
num=1+rand()%(npreg-1);
printf("La pregunta es %s\n",v[num]);
printf("Elige la respuesta\n");
/* Ahora muestro las opciones y pido al usuario que elija una*/
printf("1) Muy bueno\n");
printf("2) Bueno\n");
printf("3) Malo\n");
printf("4) Muy malo\n");
printf("Marca 1,2,3 o 4\n");
scanf("%s",&eleccion);
/* En función de qué respuesta elija, o bien conta,contb,contc o contd, se
incrementarán en una unidad*/
if (eleccion=1){
conta=conta+1;
}else if (eleccion=2){
contb=contb+1;
}else if(eleccion=3){
contc=contc+1;
}else if(eleccion=4){
contd=contd+1;
}
}
contusua=contusua+1;
}
/* Una vez que hemos realizado todo, hallamos las estadísticas*/
/*Porcentaje de respuestas dadas*/
suma=conta+contb+contc+contd;
porcenta=(conta/suma)*100;
porcentb=(contb/suma)*100;
porcentc=(contc/suma)*100;
porcentd=(contd/suma)*100;
printf("El porcentaje de a es: %d\n",porcenta);
printf("El porcentaje de b es: %d\n",porcentb);
printf("El porcentaje de c es: %d\n",porcentc);
printf("El porcentaje de d es: %d\n",porcentd);
return 0;
getch();
}
Yo creo que el problema lo tengo en la función fgets. A ver si me podéis ayudar por favor, para que me imprima por pantalla la pregunta
Un saludo y gracias de antemano.