Removendo o “n” de uma string lida usando fgets() – c

Pergunta:


Geralmente quando se usa a função fgets() ela lê a string porém é sensível ao Enter, como ler a string ser adicionar a ela o “n”??

Autor da pergunta Islas

Resposta :

Uma coisa que você pode fazer é ler a string com o 'n' e apagá-lo depois, escrevendo um ” no lugar do n.

Outra coisa que você pode fazer é ler a string letra por letra, via getcha. Assim você tem controle total sobre o que você escreve na sua string.

A maneira melhor, na minha opinião, é ler a string completa e depois remover o 'n'

char input[1000];
size_t len;
if (!fgets(input, sizeof input, stdin)) { /* tratamento de erro */ }
len = strlen(input);
if (len == 0) { /* normalmente isto nunca acontece */ }

/* alguns "ficheiros de texto" nao tem 'n' na ultima linha */
if (input[len - 1] == 'n') input[--len] = 0; // remove 'n' e actualiza len

A função fgets() é semelhante à função gets(), porém, além dela poder fazer a leitura a partir de um arquivo de dados e incluir o caracter de nova linha na string, ela ainda especifica o tamanho máximo da string de entrada, a função gets() não tem este controle, o que poderia acarretar erros de “estouro de buffer”.

Para remover o ‘n’ você pode fazer da seguinte maneira:

minhaString[strcspn(minhaString, "n")] = 0;

Fonte.

Para remover o ‘n’ do final da string, tente isto:

size_t ln = strlen(input) - 1;
if (name[ln] == 'n')
    name[ln] = '';

Fonte: https://stackoverflow.com/a/2693827/194717

ou isto:

char *pos;
if ((pos=strchr(input, 'n')) != NULL)
    *pos = '';

Fonte: https://stackoverflow.com/a/2693826/194717

Uma vez lida a String você pode usar métodos da classe String.
Ex.:

string teste;
FILE arquivo;
arquivo = fopen("arquivo.txt" , "r");
if( fgets (teste, [tamanho do arquivo], arquivo)!=NULL ) {
  puts(teste);
}
fclose(arquivo);
string testeSemN = teste.Replace("n", String.Empty);
// ou também: teste.Replace("n", "");

Fonte

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *