2011-02-18 16 views
5
if (checkForRoll == "intellect" && checkForRoll == "Intellect") {//checks for intellect 
     intellect = intellect + 5; 
    } else if (checkForRoll == "strength" && checkForRoll == "Strength") { 
     strength = strength + 5; 
    } 
    cout << intellect; 

Cuando ejecuto esto, el intelecto int no agrega 5. ¿Por qué?¿Por qué mi variable "intelecto" no agrega por 5?

+3

¿Qué es 'checkForRoll'? – AnT

+2

Más detalladamente que AndreyT: ¿Cuál es el ** Tipo ** de checkForRoll. –

Respuesta

16

Necesita que su cuerda sea igual tanto para el intelecto como para el intelecto, lo cual es imposible. Cambia el "y" (&&) a un "o" (||).

2

Su variable checkForRoll no puede ser 'fuerza' & & 'Fuerza', puede ser 'fuerza' || 'Fortaleza' sin embargo.

0

Creo que debería reemplazar & & con ||

P.S. también puede escribir intellect + = 5

2

CheckForRoll no puede ser tanto "intelecto" como "intelecto".

Suponiendo que está utilizando un std::string convertir a upppercase, y hacer una comparación.

std:string checkForRoll = "inTeLleCt"; 

std::transform(checkForRoll.begin() , checkForRoll.end() , checkForRoll.begin(), ::toupper); 

if (checkForRoll == "INTELLECT") 
{ 
.... 
} 
+1

Se supone que es '=='? – AnT

+0

@AndreyT - sí. –

+0

Alternativamente, vea la presentación de Herb Sutter sobre la implementación de una especialización de cadena básica que opera de una manera que no distingue entre mayúsculas y minúsculas: http://www.gotw.ca/gotw/029.htm –

1

Esto sólo obra de checkForRoll es una string
Si se trata de un char* entonces no se puede comprobar la igualdad con ==. Necesita usar strcmp() para comparar.

1

Para hacerte la vida más fácil, te sugiero que utilices std::toupper o std::tolower para convertir la cadena antes de comparar. Vea también std::transform.

Esto simplifica su vida mediante el uso de una sola comparación.

"¡Pruébalo, te gustará!"

Cuestiones relacionadas