Al iniciar y colocar las respuestas correctas me da como resultado = 0
Normal, respondas lo que respondas, igualas el resultado a cero:
…
if (p1 == 1) {
n1 = 1; // <---- Guardas 1
}
else {
}
n1 = 0; // <---- Sobrescribes con 0
…
if (p2 == 3) {
n2 = 1; // <---- Guardas 1
}
else {
}
n2 = 0; // <---- Sobrescribes con 0
Seguramente querías poner la sobrescritura en el else
:
…
if (p1 == 1) {
n1 = 1;
}
else {
n1 = 0;
}
…
if (p2 == 3) {
n2 = 1;
}
else {
n2 = 0;
}
Puedes incluso simplificar con un operador ternario:
…
n1 = (p1 == 1) ? 1 : 0;
…
n2 = (p2 == 3) ? 1 : 0;
Otras cosas a tener en cuenta.
Además del problema mencionado, tu código tiene otros problemas que vale la pena mencionar:
- En C++ la entrada desde consola en C++ es mediante
std::cin
y la salida mediante std::cout
. Las funciones printf
y scanf
pertenecen a las utilidades de C.
- Estás incluyendo cabeceras que NO usas. Pero además las cabeceras
<stdio.h>
, <math.h>
y <stdlib.h>
son de c no de c++. Las cabeceras de C disponen de una versión adaptada a C++ que tiene el prefijo c
y carecen de extensión. Si realmente necesitas usar las cabeceras de C (que rara vez será el caso y ciertamente no es el tuyo) debes usar los equivalentes de C++ , y . Lee este hilo para saber por qué.
- Relacionado con el punto anterior: estás incluyendo a la vez
<stdlib.h>
y <cstdlib>
y ambas cabeceras son la misma pero en versión C y C++ respectivamente.
- La cabecera
<conio.h>
no forma parte de las cabeceras estándar de C. Esta cabecera es una utilidad proveída por el compilador de la plataforma, declara varias funciones para permitir al usuario interactuar con la consola y las funciones proveídas varían entre compiladores y plataformas, en definitiva no sigue ni el ANSI C ni el POSIX. Ese es el motivo por el que no se recomienda su uso, pues hace que el código no sea portable.
Propuesta.
Tu código podría ser más C++ si usas programación orientada a objetos y las utilidades de C++:
struct Pregunta
{
std::string texto;
unsigned correcta;
};
Pregunta preguntas[] =
{
{ "¿Cuantos ojos tiene un perro?\n1) 2 ojos\n2) 9 ojos\n3) 2 ojos\n4) 7 ojos", 1 },
{ "¿Cuantas patas tiene un perro?\n1) 3 patas\n2) 7 patas\n3) 4 patas\n4) 9 patas", 3 }
};
int main()
{
int aciertos = 0;
std::cout << "Esta es tu evaluación cuenta con 10 preguntas de selección multiple\n";
for (const auto &pregunta : preguntas)
{
std::cout << pregunta.texto;
int respuesta;
std::cin >> respuesta;
aciertos += static_cast<int>(respuesta == pregunta.correcta);
}
std::cout << "Tu resultado del examen es de " << aciertos;
return 0;
}