Pegando entrada do teclado e guardando em uma string
Publicado por leonardo (última atualização em 26/01/2011)
[ Hits: 10.959 ]
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 }
Equações de primeiro e segundo grau
Formatar strings em C (RG, telefone, CEP etc)
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
Problema com o Centro de Aplicativos Ubuntu 25.04 (3)
E aí? O Warsaw já está funcionando no Debian 13? (9)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (6)