Mayusculas a minusculas problema c++

Iniciado por nolram, 16 Abril 2014, 08:40 AM

0 Miembros y 2 Visitantes están viendo este tema.

nolram

buenas............
lo que pasa es que intento pasar un char a mayusculas pero el programa me tira un error:

#include <iostream>
using namespace std;

int main () {
   char c;
   do{
         cin >> c;
         if(c >= 'a' and c<='z') {
                       c -= 'a' - 'A';
                       cout << c;
        }
        else if(c >= 'A' and c<='Z'){
                       c -= 'A' - 'a';
                       cout << c;
         }
   }while(c!= 'p';   
   cout << endl;


funciona el problema es que cuando introduzco el octavo caracter el programa se vuelve loco y se cierra y no se por que;
alguien puede ayudarme a resolver esto.....
muchas gracias.....

x64core

Código (cpp) [Seleccionar]
   char c;

   while((cin >> c), c != 'p')
   {
        if((c >= 'a') && (c <= 'z'))
        {
            c -= 'a' - 'A';
            cout << c;
        }
        else if((c >= 'A') && (c <= 'Z'))
        {
            c -= 'A' - 'a';
            cout << c;
        }
        cout << endl;
    }
   
   cout << endl;

rir3760

Cita de: nolram en 16 Abril 2014, 08:40 AMlo que pasa es que intento pasar un char a mayusculas pero el programa me tira un error
Lo mejor en tu caso es utilizar (por sencillo) las funciones tolower y toupper (prototipos en <cctype>).

En cuanto al programa esta incompleto (falta el final de la funcion main), falta el parentesis de cierre en el bucle while, al convertir el caracter a mayusculas/minusculas debes restar el primer operando y sumar el segundo. Por ultimo la condicion de la salida no la aclaras.

Si se trata de salir cuando el caracter sea 'p' o 'P' el bucle se debe cambiar a:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main ()
{
   char c;
   
   do{
      cin >> c;
     
      if (c >= 'a' and c<='z'){
         c = c - 'a' + 'A';
         cout << c;
      }else if (c >= 'A' and c<='Z'){
         c = c - 'A' + 'a';
         cout << c;
      }
   }while (c != 'p' && c != 'P');
   cout << endl;
   
   return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

nolram

Gracias por las respuestas.......

Pero aun sigue sin funcionar..... pero descubri que el problema esta en el cin>>
ya que hice otro programa de prueba el cual le añadi un ciclo for:

char b;
for(int a =1; a<20; a++){
                   cin>>b;
                   cout<<b;
}


y cuando la a llega a 8 el ciclo se vuelve loco e imprime solo el resto hasta el llegar al 19;
pero no se por que.........
esty utilizando dev c++
MUCHAS GRACIAS POR LA ATENCION....   

nolasco281

Hola a mi me funcion con las correcciones que hizo rir3760 me andubieron perfecto no tube problema con 15 palabras que ingrese, sola faltaba unos saltos de linea, saludos.
Lo que se puede imaginar... se puede programar.

nolram

Pues amigo si a ti te funciono entonces estoy pensando seriamente que le problema esta en el dev c++;

por que la verdad lo he intentado varias veces y no funciona de ninguna manera simepre al ingresar el caracter 8 se cierra........   

nolasco281

Aca la prueba



Es raro que no te funcione. y como dige antes solo faltan algunos espacios.

Saludos.
Lo que se puede imaginar... se puede programar.

x64core

Cita de: nolram en 16 Abril 2014, 19:59 PM
Gracias por las respuestas.......

Pero aun sigue sin funcionar..... pero descubri que el problema esta en el cin>>
ya que hice otro programa de prueba el cual le añadi un ciclo for:

char b;
for(int a =1; a<20; a++){
                   cin>>b;
                   cout<<b;
}


y cuando la a llega a 8 el ciclo se vuelve loco e imprime solo el resto hasta el llegar al 19;
pero no se por que.........
esty utilizando dev c++
MUCHAS GRACIAS POR LA ATENCION....   
Tomando en cuenta que ese es todo el código:
char b;
for(int a =1; a<20; a++){
                   cin>>b;
                   cout<<b;
}

Probablemente debido a que estas ingresando más de un caracter como entrada, mira que a cin estas pasando una variable de tipo char no una cadena
así que cin tomara el siguiente character si existe en lugar de solicitar de nuevo una entrada del usuario. probablemente lo que necesitas es pasarle un
puntero a una cadena de caracteres.



rir3760

Cita de: nolram en 17 Abril 2014, 07:15 AMestoy pensando seriamente que le problema esta en el dev c++;

por que la verdad lo he intentado varias veces y no funciona de ninguna manera simepre al ingresar el caracter 8 se cierra
Para ayudarte a resolver el problema que mencionas primero debes publicar el código fuente completo.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language