Jump to content

Maiúsculas


Go to solution Solved by theproject,

Recommended Posts

Posted
#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 ?

Posted

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.

Posted

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

Posted

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
Posted

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

Posted
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);
}

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.