Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 11.004 ]
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 }
Bom treino, muito completo: classificação de atletas
Verificar se o e-mail é válido
Equações de primeiro e segundo grau
Qt 6.10 e Python 3.14 puxam o ritmo do software livre nesta quarta
Atualizações de Apps, Desktop e Kernel agitam o ecossistema Linux nesta terça-feira
Miyoo Mini Plus + Onion OS (Linux)
IA local no bolso, novo visual no Raspberry Pi OS e mais destaques do software livre
Kernel turbinado, compatibilidade em alta e debate sobre sustentabilidade: o dia no mundo Linux
Adicionando o repositório backports no Debian 13 Trixie
Como definir um IP estático no Linux Debian
Como colocar atalho para uma pasta na área de trabalho do Ubuntu 24.04... (2)
O que você está ouvindo agora? [2] (225)
Como vencer a procrastinação? (9)