Enviado em 19/09/2016 - 19:17h
Olá,#include <stdio.h> void conv_maiuscula(char* s){ int i; for (i=0; s[i] != '\0'; i++){ //Trata caracteres "normais" if(s[i] >= 'a' && s[i] <= 'z'){ s[i] -= 32;} //Trata caracteres "especiais" if(s[i] == -61){ i++; s[i] -= 32; } } } main() { char c[20]; system("clear"); while(1) { printf("\nDigite: "); scanf("%[^\n]",c); // %[^\n] serve para ler espaços em branco. fflush(stdin); //Limpa buffer do teclado (no Linux) __fpurge(stdin); system("clear"); //Limpa tela printf("Texto digitado: %s \n", c); conv_maiuscula(c); //Chama função para converter printf("\nMaiúsculo: %s \n", c); } return 0; }
Enviado em 19/09/2016 - 20:24h
Antes de falar da pergunta principal, permita-me sugerir que não use nem “fflush(stdin)” nem tampouco “fpurge(stdin)”. Nenhuma das duas funções é portável para outros sistemas. Um jeito de fazer o que você quer é suprimir essas duas funções, e trocar aquela chamada a scanf() pelo seguinte.scanf("%19[^\n]%*1[\n]", c) /* Limita o tamanho máximo para caber no array, e ainda retira a quebra de linha do buffer. */
Enviado em 20/09/2016 - 00:56h
Pensando bem, uma forma mais direta é trocar o tipo de dados, para trabalhar diretamente com uma string de wchar_t.#include <stdio.h> #include <wchar.h> #include <wctype.h> #include <locale.h> int main(void){ setlocale(LC_ALL, ""); /* Define que o C deve usar a locale do sistema. */ wchar_t str[20]={0}; printf("Digite seu nome: "); if(scanf("%19l[^\n]%*1[\n]", str)!=1){ fprintf(stderr, "Erro de leitura.\n"); return 1; } size_t len=wcslen(str); for(size_t n=0; n<len; n++) str[n]=towupper(str[n]); printf("Seu nome em maiúsculas: %ls\n", str); return 0; }
Enviado em 20/09/2016 - 16:55h
Cara, era exatamente isso que eu estava procurando. Estou iniciando em C e procurei muito por isto. Cheguei até encontrar algo parecido mas não conseguia fazer funcionar. Testei este código que você postou e funcionou perfeitamente.Enviado em 22/09/2016 - 16:42h
#include <stdio.h> #include <wchar.h> #include <wctype.h> #include <locale.h> int main(void){ setlocale(LC_ALL, ""); /* Define que o C deve usar a locale do sistema. */ wchar_t str[20]={0}; printf("Digite seu nome: "); if(scanf("%19l[^\n]%*1[\n]", str)!=1){ fprintf(stderr, "Erro de leitura.\n"); return 1; } size_t len=wcslen(str); for(size_t n=0; n<len; n++) str[n]=towupper(str[n]); printf("Seu nome em maiúsculas: %ls\n", str); return 0; }
Enviado em 22/09/2016 - 19:10h
Enviado em 23/09/2016 - 09:15h
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
Erro na atualização dos pacotes (7)
Ubuntu 25.04 não instala. (15)
[AJUDA] Problemas ao atualizar BIOS da Gigabyte B550M K rev. 1.1 — “RO... (5)