Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 10.921 ]
Homepage: http://www.sopadebytes.vai.la
Comentários no código fonte...
#include <stdio.h> #include <stdlib.h> /* Normalmente para ler um texto do teclado voce faria assim: #include <stdio.h> int main(int argc, char *argv[]) { char txt[8000]; printf ("Entre com o seu nome: ?\n==> "); gets (txt); //scanf ("%s", txt); printf ("O nome e: %s\n", txt); system("PAUSE"); return 0; } Mas isso desperdiçaria memoria e poderia acontecer do nome do cara ter mais de 8000 :P caracteres; Ou faria assim: #include <stdio.h> int main(int argc, char *argv[]) { unsigned char *txt; unsigned int num; printf("quantas letras tem seu nome ?\n==> "); scanf("%d", &num); txt = (char * ) malloc(sizeof(char)*num); printf("entre com seu nome:\n==> "); scanf("%s", txt); printf("O nome e: %s\n", txt); system("PAUSE"); return 0; } Mas isso não ficaria legal ... ao inves disso, voce deve fazer o seguinte: */ int main(int argc, char *argv[]) { unsigned char *txt; //declara o ponteiro que vai receber o texto unsigned int num = 0; //declara um contador txt = (char * ) malloc(sizeof(char)*1); //começa alocando o primeiro espaço na memoria printf ("Entre com o nome:\n==> "); //pergunta o nome while (*(txt+num-1) != 13){ //Enquanto o usuario não apertar enter *(txt+num) = getch(); //O comando getchar não serve, ao //inves disso, o getch retorna o caractere apertado, mas não //improme na tela putchar(*(txt+num)); //agora imprime o caractere na tela if ( *(txt+num) == 8){ //Verifica se eu apertei backspace if (num != 0){ //se eu apertei backspace e o cursor estiver em uma //posição diferente de zero putchar(' '); //Apaga o caractere daquele espaço putchar(8); // e volta pra la num = num -2; //subtrai 2, ja que vai ser adicionado 1 mais adiante }else{ //se o cursor estiver na posição zero putchar(' '); // vai pra frente mais uma vez num --; //e umpede o contador de ser incrementado } } num++; //aumenta 1 ao contador txt = realloc(txt,sizeof(char)*num+1); // e aloca memoria para receber mais um caractere } *(txt+num-1)=NULL; // agora ele coloca o terminador no ultimo valor do vetor printf ("\n");//vai para a proxima linha printf ("O nome e %s\n", txt); //e mostra o valor da variavel printf ("Aperte qualquer tecla para continuar ..."); //system("PAUSE") :x free(txt); //liberta a memoria utilizada getch(); //continuação de system("PAUSE");) return 0;//termina }
Bom treino, muito completo: classificação de atletas
Formatar strings em C (RG, telefone, CEP etc)
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)