Estoy aprendiendo C++.
En ese caso, permíteme darte la bienvenida \ñ_ñ/
y darte algunos consejos:
- Las cabeceras
<stdlib.h>
y <time.h>
son de c no de c++. Estas cabeceras disponen de una versión adaptada a C++ que tiene el prefijo c
y carece de extensión. Si realmente necesitas usar las cabeceras de C (que nunca será el caso) debes usar los equivalentes de C++ <cstdlib>
y <ctime>
. Lee este hilo para saber por qué.
- No hay obligación de usar la cláusula
using namespace std;
pues es sólo es una ayuda a la escritura de código; si decides usar esta cláusula no lo hagas en el ámbito global, úsala en el ámbito más pequeño posible. Lee este hilo para saber por qué.
- Las funciones
rand()
y srand()
pertenecen a las librerías de C, se desaconseja usar esas utilidades den C++ pues pueden no ser portables y pueden ofrecer resultados y rendimiento cuestionables, por ello se está estudiando deprecarlo . A partir del estándar C++11 existe una completa librería de generación de números pseudoaleatorios que deberías usar en su lugar. Lee este hilo para saber por qué.
La idea es que cuando la variable vida
o evida
lleguen a 0
se pare el while
, pero en lugar de eso espera a que las 2 variables sean menores o iguales a 0
.
Ese es el comportamiento esperado; en una condición unida por un or (||
) la expresión será verdadera mientras alguna de las expresiones sea verdadera y en consecuencia será falsa cuando ambas expresiones lo sean:
| tabla de la verdad OR |
+-------------+-------------+----+-----------+
| expresión 1 | expresión 2 | || | resultado |
+-------------+-------------+----+-----------+
| falso | falso | || | falso |
| falso | verdadero | || | verdadero |
| verdadero | falso | || | verdadero |
| verdadero | verdadero | || | verdadero |
Tú lo que quieres es una condición and (&&
), que será verdadera cuando todas las expresiones sea verdaderas y en consecuencia será falsa en los demás casos:
| tabla de la verdad AND |
+-------------+-------------+----+-----------+
| expresión 1 | expresión 2 | && | resultado |
+-------------+-------------+----+-----------+
| falso | falso | && | falso |
| falso | verdadero | && | falso |
| verdadero | falso | && | falso |
| verdadero | verdadero | && | verdadero |
Por lo tanto tu while
, con and (&&
):
while(vida >= 0 && evida >= 0)
Se podría leer como "Mientras vida
sea mayor o igual a 0
Y evida
sea mayor o igual a 0
".