Introdução à Linguagem C – Tutorial II

Linguagem C

Uma tarefa simples em outras linguagens, mas em C, é bem confusa, é quando você tenta armazenar em uma variável, uma string que contenha espaços em branco.


Exemplo 1:

#include

20

“Entre com seu nome\n

// se você digitar seu nome completo, terá problemas

%s

// na variável “nome” será armazenada apenas a primeira// palavra digitada.

“Seu nome é: %s \n

No exemplo acima, o programa solicita um nome. Se você digita uma string composta, no caso, seu nome completo, a função scanf() irá desprezar todo o conteúdo a partir do espaço. Desta forma, na variável nome conterá apenas o primeiro nome digitado.

Uma outra alternativa poderia ser a função gets(). É, poderia… mas gets() não é uma boa alternativa.

Com a função gets() não há limites, o usuário poderá digitar mais caracteres do que o que foi definido no array, na declaração da variável.

Exemplo 2:

#include

// nos [] você define o número máximo de caracteres char

20

“Entre com seu nome\n

// se o usuário digitar mais que 20 caracteres, haverá um erro

// na variável “nome”, foi armazenado apenas a primeira palavra

“Seu nome é: %s \n

A melhor forma então, utilizar a função fgets():

Exemplo 3:

#include

20

“Entre com seu nome\n

// fgets() tem a mesma funcionalidade de gets()

// na variável “nome”, foi armazenado a frase completa

“Seu nome é: %s \n

Ainda haverá um problema, caso exista um scanf() antes do fgets():

Exemplo 4:

#include

20

“Digite sua idade\n

%d

\nEntre com seu nome\n

// aqui não será solicitada uma entrada de dados

“Seu nome é: %s \n

Neste exemplo, o fgets() nem solicitará uma entrada, isto porque, ele pega o ‘\n’ do ENTER, que foi usado para inserir dados com o scanf(). É necessário então, limpar o buffer de entrada.

No próximo exemplo, a solução:

Exemplo 5:

#include

20

“Digite sua idade\n

// o scanf ler o conteúdo digitado, depois, o parâmetro *c,// faz com que seja retirado os demais caracteres.

%d%*c

“\nEntre com seu nome\n”

// agora, tudo perfeito

// “nome” armazenou apenas a frase digitada

“Seu nome é: %s \n

Para aprender como compilar arquivos .c no Linux, leia a dica Compilando arquivos .c no Linux.

The end!

 

3 thoughts on “Introdução à Linguagem C – Tutorial II

  1. Olá.
    A diferença entre o gets e o fgets não é só essa.
    Pois quando você inclui uma string com tamanho menor que o máximo, no fgets, sua variável recebe o caracter ”
    ” no final em qualquer posição de sua string quando você termina de digitar.
    Como posso resolver isso? Como retirar esse ”
    ” do final de minha string?

  2. Muito obrigado! Eu simplesmente não entendia por que o compilador gcc para windows compilava mas não rodava direito o programa com o fgets.

    já procuro a solução há algum tempo até cair aqui. A solução deste blog vestiu como uma luva para meu caso de código híbrido (scanf e fgets).

    Mais uma vez muito obrigado!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Time limit is exhausted. Please reload CAPTCHA.