Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 11.029 ]
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
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Instalação dualboot Windows 11 e Debian 13 (0)
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









