Acabo de empezar a estudiar ficheros en C++. Estaba intentado hacer un ejercicio pero no he sido capaz de sacarlo.
El enunciado es el siguiente:
Realizar un programa que lea por teclado el nombre de un fichero. Este fichero contendrá una serie de preguntas tipo test. El número de preguntas que contendrá el fichero nunca será mayor de 50.
Para cada pregunta, el fichero contendrá tres posibles respuestas y un número indicando cual de las tres posibles respuesta es la correcta (ver fichero adjunto de ejemplo). De esta forma, el formato del fichero será el siguiente:
pregunta1 --salto de linea respuesta_correcta_a_la_pregunta1 salto de linea respuesta1 salto de linea respuesta2 salto de linea respuesta3 salto de linea pregunta2 salto de linea respuesta_correcta_a_la_pregunta2 salto de linea respuesta1 salto de linea respuesta2 salto de linea respuesta3 salto de linea ...
El programa, tras cargar los datos del fichero a memoria en una estructura de datos adecuada, deberá realizar el test mostrando por pantalla cada una de las preguntas y posibles respuestas y leyendo por teclado la respuesta a cada pregunta.
Al finalizar, el programa mostrará por pantalla el número de respuesta correctamente respondidas, el número de respuestas incorrectamente respondidas y la puntuación calculada según la siguiente fórmula:
puntuación = 10 * (respuestas_correctas – (respuestas_incorrectas / 2)) / total_de_preguntas_en_el_fichero
Tener en cuenta que la puntuación deberá ser calcula como un número real.
Os dejo mi codigo:
#include <iostream>
#include <fstream>
#include <array>
#include <string>
using namespace std;
const int MAX_PREG = 10;
struct preguntas{
string pregunta;
int respuesta;
string respuesta1;
string respuesta2;
string respuesta3;
};
typedef array <preguntas,MAX_PREG> array_dat;
struct Ttest{
int np = 0;
array_dat pr;
};
int main(){
int respuesta_introducida;
int contador = 0;
Ttest x;
array_dat y;
string fichero;
cout << "Introduce el nombre del fichero " << endl;
cin >> fichero;
ifstream fichero1;
fichero1.open(fichero);
string linea;
int correcta;
//getline(fichero1,linea);
//contador++;
while(!fichero1.eof()){
if (contador == 0 || contador % 4 == 0){
x.pr[x.np].pregunta = linea;
}
if (contador == 1 || contador % 1 == 1){
x.pr[x.np].respuesta = correcta;
}
if (contador == 2 || contador % 2 == 0){
x.pr[x.np].respuesta1 = linea;
}
if(contador == 2 || contador % 2 == 0){
x.pr[x.np].respuesta2 = linea;
}
if(contador == 3 || contador % 3 == 0){
x.pr[x.np].respuesta3 = linea;
}
getline(fichero1,linea);
}
}
El txt de ejemplo que estaba usando era este:
De los siguientes animales cual no es un mamifero? 2 La ballena El pulpo La vaca Cuando vale 0 dividido por 5? 1 0 1 No se puede calcular Un bucle for 2 Puede utilizar una variable de control de tipo double Tiene que ser determinista Ninguna de las otras dos respuestas es correcta
La dudas que tengo es que no se como asignar cada linea a cada elemento de la estructura, es decir elegir la linea que asigno a cada elemento de la estructura.De eso surge el lio que tengo abajo con los contadores, etc