[C con Clase] switch no suma
Steven Davidson
srd4121 en njit.edu
Mar Sep 18 03:45:51 CEST 2012
Hola Marcelo,
On 9/17/2012 9:00 PM, Marcelo wrote:
> Ejercicio sencillo para lógica. Se trata de sumar bolillas de tres
> colores diferentes las cuales se extraen de a una por vez. Mi
> problema es que no me suma y me muestra al final todos los valores en
> cero :@. La variable vOpc está como char porque inicialmente la
> definí como int (leí que un caracter es un entero y se trataría en
> éste caso de la misma manera) pero solo me pedía el primer ingreso y
> luego el bucle se repetía hasta terminar sin pedir nada más.
>
>
Veamos el código fuente.
> #include <vcl.h>
> #pragma hdrstop
> #include <iostream.h>
> #include <conio.h>
> #include <ctype.h>
>
> //---------------------------------------------------------------------------
>
> #pragma argsused
> int main(int argc, char* argv[])
> {
> int i , vConAm , vConRo , vConVe;
> char vOpc;
> vConAm = 0 ; vConRo = 0 ; vConVe = 0;
>
> for(i = 0 ; i <= 10 ; i++){
Esto implica que se realizarán 11 iteraciones; no sé si es lo que
quieres, pero te lo comento.
> clrscr();
> cout << "Bolilla numero: " << i << "\n\n";
> cout << "Ingrese color de bolilla: 'A' , 'R' , 'V' :\t\a";
> cin >> vOpc;
> toupper(vOpc);
Aquí está el problema. Esta función no modifica el parámetro que pasas,
sino que retorna el carácter en mayúsculas, si se puede.
Podrías hacer esto:
vOpc = toupper( vOpc );
O incluso,
switch( toupper(vOpc) )
{
...
}
ya que no usas 'vOpc' después del 'switch/case'.
> switch(vOpc){
> case 'A':
> vConAm = vConAm++;
Esto no es aconsejable, ni tampoco necesario. Simplemente, incrementa;
esto es,
++vConAm;
o si lo prefieres,
vConAm++;
> break;
> case 'R':
> vConRo = vConRo++;
Aquí lo mismo que antes,
++vConRo;
> break;
> case 'V':
> vConVe = vConVe++;
Y aquí lo mismo,
++vConVe;
> break;
> //default:
> //cout << "\n\n\tOpcion no valida.";
> }
> }
> cout << "\n\nTotal de Amarillas: " << vConAm;
> cout << "\nTotal de Rojas: " << vConRo;
> cout << "\nTotal de Verdes: " << vConVe << "\n\n";
>
>
> system("pause");
> return 0;
> }
>
>
Espero que esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase