Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 10.939 ]
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 }
Fila com Lista Encadeada Descritor/Cabeçalho
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
O macete do Warsaw no Linux Mint e cia
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Sem espaço na partição home (1)
O que você está ouvindo agora? [2] (190)
Procrastinação e autossabotagem são problemas muito comuns na sociedad... (5)
warsaw parou de funcionar após atualização do sistema (solução) (10)