Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 11.099 ]
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
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









