Ayuda en C++ (Conversion de Caracteres)

Iniciado por DragonShiryu, 14 Septiembre 2011, 23:30 PM

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

DragonShiryu

Bueno quiero que me ayuden con esto... Veran, es que tiene que hacer que al meter texto en minusculas, lo convierta en letras mayusculas. Ya hice el menu y todo pero no lo hace... Por fas ayudenme se los agradecere mucho.

CODIGO:

#include<stdio.h>
#include<conio.h>
void conversion (void);
void MinToMay(char string[]);
main()
{
int i,NO;
for(i=0; i<80;i++)
{
textcolor(WHITE);
gotoxy(i,1);printf("=");
gotoxy(i,23);printf("=");

}
textcolor(WHITE);
gotoxy(30,5); cprintf("Bienvenidos(as)");
gotoxy(10,7); cprintf("Programa de conversion de letras de Mayus. a Minus. o Viceversa");
gotoxy(30,21);cprintf("Presione una tecla para continuar...");
getch();
clrscr();
textbackground(RED);
clrscr();
do
{
clrscr();
gotoxy(30,4);printf("MENU DE OPCIONES\n\n");
printf(" 1.- Iniciar conversion.\n");
printf(" 2.- Salir.");
printf("\n\n\n\n Presione una opcion...");
scanf("%d",&NO);
switch(NO)
{
case 1: clrscr();
conversion();
getch();
break;
default:
printf(" Opcion Inconrrecta, presione una tecla para volver a intentarlo...");
getch();
clrscr();
}
}while(NO!=2);
printf("\t\t\t\n\n\n\n\n ADIOS!! :D");
getch();
}

void conversion (void)
{
char cadena[80];
clrscr();
printf("\n\t\t\tCONVERSION DE PALABRA(S)\n");
printf("\n\nPor favor, Introduzca la(s) palabra(s) que desea convertir y presione ENTER: \n");
printf("\n ");
gets(cadena);
MinToMay(cadena);
printf ("En Mayusculas: %s \n", cadena);
getch();
}


void MinToMay(char string[])
{
int i=0;
int desp='a'-'A';
for (i=0;string!='\0';++i)
{
if(string>='a'&&string<='z')
{
string=string-desp;
}
}
}
getch();

Este codigo es de C++ (Borland)

Eternal Idol

¿Hace falta usar tantas funciones no standard de Borland? getch lo cambie por getchar que es standard y las otras pavadas de la consola las borre.

conversion y MinToMay parecen funcionar bien, podes probarlas desde un main que solo llame a conversion.

Puede que tu problema se deba a la basura que deja en el buffer scanf, podes probar hacer esto:

char cad[80];
fgets(cad, sizeof(cad), stdin);
sscanf(cad, "%d",&NO);
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

LearningSpanishProgrammer

Estoy aprendiendo español, y tu estas aprendiendo programación

El_Java

#3
Cita de: LearningSpanishProgrammer en 14 Septiembre 2011, 23:44 PM
Yo recomendiendo usar

isupper - http://www.cplusplus.com/reference/clibrary/cctype/isupper/
islower - http://www.cplusplus.com/reference/clibrary/cctype/islower/

y también

tolower
toupper

Su codigo sería más fácil de leer

Lleva toda la razon, y para convertir de minusculas a mayusculas basta con que le restes 32 (en caso de que no sepas usar toupper)
Código (cpp) [Seleccionar]

char g = 'a';
g -= 32; //Ahora g es igual a 'A'
cout << g;


http://www.elcodigoascii.com.ar/

DragonShiryu

Gracias a todos pero me enrede con las 3 respuestas. Yo antes sabia de esto porque estaba estudiando programacion hace año y medio, pero se me olvido ;D.

Compañero @Eternal Idol me podrias poner el codigo ya corregido en un mensaje. Asi se me hace mas facil encontrar el error ya que como me lo pones no le entiendo casi, porfas..

Saludos y Gracias a todos!!

Eternal Idol

Donde vos tenes esto:

scanf("%d",&NO);

Cambialo por esto:
char cad[80];
fgets(cad, sizeof(cad), stdin);
sscanf(cad, "%d",&NO);


Y antes podes probar el main asi:
main()
{
conversion();
}
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

DragonShiryu

Mil gracias @Eternal Idol  ;-)

Pero ahora, no quiero fastidiar mas pero me podrias explicar que quiere todo, es decir:
char cad[80];
fgets(cad, sizeof(cad), stdin);
sscanf(cad, "%d",&NO);


Te lo agradeceria mucho..
Saludos!

Eternal Idol

En lugar de usar scanf que es una funcion conocida por dejar basura en el buffer y dar problemas despues cuando lees (como te pasaba en tu programa) usamos la alternativa limpia y segura fgets con stdin + sscanf.

fgets lee una linea (casi igual que gets) pero permite especificar el tamaño de la cadena y con sscanf en lugar de trabajar con stdin trabajas con la cadena que leiste antes con fgets.

http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón