Gurzi Posted March 4, 2006 at 03:39 PM Report #16761 Posted March 4, 2006 at 03:39 PM #include <stdio.h> #include <stdlib.h> main() { char ch; printf("Introduza um caracter"); scanf("%c",&ch); ch =ch -'A' + 'a'; printf("%c",ch); } porque é que o resultado final me aparece simbolos mta marados ? em vez de a letra em maiscula ?
saramgsilva Posted March 4, 2006 at 03:46 PM Report #16764 Posted March 4, 2006 at 03:46 PM existe numa biblioteca do C, uma funcao para passar as letras para maisculas... isso pode dar mal, por estares a fazer mal as "contas..." vai a tabela de ASCII o numero de cada char...e ve o que andas a fazer... de mal :dontgetit: www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Warrior Posted March 4, 2006 at 04:10 PM Report #16768 Posted March 4, 2006 at 04:10 PM tenta -'a'+'A'
vbmaster Posted March 4, 2006 at 04:47 PM Report #16775 Posted March 4, 2006 at 04:47 PM Declara ch como int e converte depois para char no output. 🙂
Cavaleiro Posted March 4, 2006 at 05:16 PM Report #16778 Posted March 4, 2006 at 05:16 PM Essa é uma das maneiras de fazeres, mas caso não consigas meter a funcionar dessa maneira tenta usar um if, como se sabe a diferença de caracteres entre o 'a' e 'A' é 32, julgo que não estou enganado mas nada melhor como verificares na ASCII table, e depois juntas ou retirar 32 para obteres ou maiuscula ou minuscula, consoante tu desejares.
Gurzi Posted March 4, 2006 at 06:31 PM Author Report #16789 Posted March 4, 2006 at 06:31 PM essa do 32 ja aprendi, mt bem 🙂 obrigado 😛
redhat Posted March 5, 2006 at 03:10 PM Report #16890 Posted March 5, 2006 at 03:10 PM Ja' ontem tinha passado pelo topico, lembrei-me na altura de como se podia resolver! A minha soluçao seria: #include <stdio.h> main() { char ch; int aux; printf("Introduza um caracter: "); scanf(" %c", &ch); aux = (int)ch - 32; printf("%c\n",(char)aux); } Codigo qual gerou o resultado: LappyG4:~/P@P/maiusculas jmf$ gcc maiusculas.c LappyG4:~/P@P/maiusculas jmf$ ./a.out Introduza um caracter: a A Espero ter ajudado!! Um abraço Software is like sex... it's better when it's free in the old days P@P "C" && "Linux" Moderator
vbmaster Posted March 5, 2006 at 03:18 PM Report #16893 Posted March 5, 2006 at 03:18 PM eu disse que a solução passava por declarar a variavel como int!
redhat Posted March 5, 2006 at 03:22 PM Report #16895 Posted March 5, 2006 at 03:22 PM pois, tens razao, nem reparei (e' a mania de ler o primeiro post, e tentar tirar a duvida) neste caso usei a capacidade de fazer cast as variaveis!! muito util no caso de alguns mallocs e afins! falta o gurzi dizer se e' realmente isto que ele queria =) outro abraço Software is like sex... it's better when it's free in the old days P@P "C" && "Linux" Moderator
Solution theproject Posted March 6, 2006 at 01:11 AM Solution Report #16984 Posted March 6, 2006 at 01:11 AM Boas, em vez de fazeres essa conta esquesita com a diferenca entre os códigos ASCII , as boas prácticas de programacaop dizem-te k deves chamar uma função para fazer isso. Como a tofas disse essa funcao existe e depois de passar uma beka a ver se me lembrava kual era, finalmente consegui, é a funcao int toupper(int c); Esta funcao existe pelo menos em ambientes Unix/Linux, nao te eskecas k tens de meter o #include <ctype.h> No teu caso deves usá-la assim : ch = (char)toupper( (int)ch ); Fika bem
entering Posted March 7, 2006 at 07:03 PM Report #17245 Posted March 7, 2006 at 07:03 PM Em 05/03/2006 às 16:10, redhat disse: Ja' ontem tinha passado pelo topico, lembrei-me na altura de como se podia resolver! A minha soluçao seria: #include <stdio.h> main() { char ch; int aux; printf("Introduza um caracter: "); scanf(" %c", &ch); aux = (int)ch - 32; printf("%c\n",(char)aux); } Codigo qual gerou o resultado: LappyG4:~/P@P/maiusculas jmf$ gcc maiusculas.c LappyG4:~/P@P/maiusculas jmf$ ./a.out Introduza um caracter: a A Espero ter ajudado!! Um abraço Em 05/03/2006 às 16:18, vbmaster disse: eu disse que a solução passava por declarar a variavel como int! Não necessariamente a soluçao ideal foi dada pelo theproject 🙂 Mas se nao quiserem usar essa função a soluçao do redhat serve embora possa ser melhorada aquela declaração da variavel inteira é um gasto de memoria desnecessario (tudo bem sao apenas 2 bytes, mas em programas grandes se por cada var que precissamos usasse duas era um bocado mau). Se usas o gcc deves também sempre compilar com a flag -Wall $ gcc -Wall redhat-maiscula.c redhat-maiscula.c:4: warning: return type defaults to `int' redhat-maiscula.c: In function `main': redhat-maiscula.c:12: warning: control reaches end of non-void function Possivel solução #include <stdio.h> int main (void) { char ch; printf("Introduza um caracter: "); scanf("%c", &ch); printf("%c\n",(int)ch - 32); return (0); } Apenas se usa uma var Embora mais correcta ainda nao esta completamente correcta Na minha opinião deve ser feita uma verificação ao input, ou seja se esta entre a-z (minusculo). Embora nao seja obrigatorio. Seria algo do genero: #include <stdio.h> #include <stdlib.h> int main (void) { char ch; printf("Introduza um caracter: "); scanf("%c", &ch); if (((int)ch<97) || ((int)ch>122)) { fprintf (stderr,"Erro - Caracter invalido.\n"); exit (EXIT_FAILURE); } printf("%c\n",(int)ch - 32); return (0); }
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now