Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 11.141 ]
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
}
Automato Finito Determinístico
Verificar se o e-mail é válido
Berry Bank: Criando um Banco Digital Gamificado para seus Filhos com Gentoo, Flask e Tailscale
Papagaiando o XFCE com temas e recursos
Instale o DOOM Retro no Gentoo facilmente via Overlay
Steam (Flatpak) rodando jogos em partição NTFS
O dock Plank + U-Launcher deixam qualquer desktop mais produtivo
Instalar Linux em notebook Sony Vaio VPCEG13EB (17)
Alguém tem que acabar com ANATEL!!! (10)
O que você está ouvindo agora? [2] (229)









