[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