Função boa para ler string em C
Publicado por Elgio Schlemer (última atualização em 16/01/2010)
[ Hits: 45.245 ]
Homepage: https://profelgio.duckdns.org/~elgio
Muitos tem certa dificuldade em ler strings em C, principalmente se usar o scanf, que não lê espaços em branco em sua forma original. Um artigo meu em http://www.vivaolinux.com.br/artigo/Parametros-interessantes-do-scanf-e-do-printf-em-C descreveu um pouco deste problema e aqui publico uma função em C que resolve estes problemas.
/* TÍTULO: Função boa para ler strings Uma função boa para ler strings que resolve o problema que o fflush resolveria A técnica é não aceitar string vazia. Deve ser passada a string e o tamanho máximo A função NÃO DEIXA digitar mais do que o tamanho máximo e o que exceder este tamanho NÃO SERÁ LIDO, ficando para a próxima função que realizar alguma leitura */ #include <stdio.h> int lestring(char s[], int max) { int i = 0; char letra; /* No caso o max é o tamanho que s pode receber. Deve ser passado o tamanho mesmo, ou seja, se for passado 100 a função já se encarrega de não deixar passar de 99 cars (+1 do finalizador) */ for (i = 0; i < (max - 1); i++) { letra = fgetc(stdin); /* Veja que se encontrou um ENTER (\n) mas não leu nenhum caractere válido, * não aceita. Precisa ler algo. Decrementa o i para anular o efeito do i++ * do laço e volta no laço com continue */ if ((letra == '\n') && (i == 0)) { i = i - 1; continue; } /* Agora se leu um enter já tendo lido caracteres válidos, então * o usuário terminou de digitar sua string e ela possui ao menos * um caractere válido */ if (letra == '\n') break; s[i] = letra; } /* Finaliza a string */ s[i] = 0; /* retorna a quantidade de cars lidos (pode ser útil). Então, esta função lê uma string e retorna o seu tamanho */ return (i); } // Exemplo de uso da lestring: /* Dentro do main... */ #define MAXSTR 20 int main() { char s[MAXSTR]; int t; t = lestring(s, MAXSTR); printf("Você digitou %s\n", s); printf("E esta string tem %i cars\n", t); return (0); } /* Com esta função não precisa usar o fflush. Ela lê espaços em branco e não mais do * que a capacidade da string. Muito melhor que o scanf, pois em sua versão original * não lê espacos. Melhor que o gets, pois o gets, assim como scanf, permite INVADIR * a string (overflow). Melhor que o fgets, pois não precisa limpar o buffer do * teclado com fflush. */
Teoria do Caos - (Equação Logística)
Conio.h para Linux (Nova versão)
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Aplicativo simples para gravar tela
Quebra de linha na data e hora no Linux Mint
Ubuntu com problemas no áudio (1)
Firefox não abre em usuário não administradores (1)
Sempre que vou baixar algum pacote acontece o erro dpkg (8)
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (8)