[C con Clase] switch no suma

Marcelo marcefont en gmail.com
Mar Sep 18 21:21:17 CEST 2012


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

Muchísimas gracias Steven, de a poco y con la colaboración de ustedes voy aprendiendo, no todo está en los libros. Que tengas un muy buen día.


Más información sobre la lista de distribución Cconclase