Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 11.125 ]
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
}
Verificar se o e-mail é válido
Formatar strings em C (RG, telefone, CEP etc)
METODO DA FALSE POSIÇÃO E BISSEÇÃO em "C"
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Necessário autenticar ao imprimir - Ubuntu X Windowns (1)
O que houve com slackware ??? (11)
O Free Download Manager não abre no Fedora 43 KDE Plasma (2)









