Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 10.790 ]
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 }
Mini Analisador Léxico que conta palavras numa string
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta