|

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 <stdio.h>
int main() { char nome[20];
printf("Entre com seu nome\n");
// se você digitar seu nome completo, terá problemas scanf("%s",nome);
// na variável "nome" será armazenada apenas a primeira // palavra digitada. printf("Seu nome é: %s \n",nome); return(0); }
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 <stdio.h>
int main() { // nos [] você define o número máximo de caracteres char nome[20];
printf("Entre com seu nome\n");
// se o usuário digitar mais que 20 caracteres, haverá um erro gets(nome);
// na variável "nome", foi armazenado apenas a primeira palavra printf("Seu nome é: %s \n",nome); return(0); }
A melhor forma então, utilizar a função fgets(): Exemplo 3: #include <stdio.h>
int main() { char nome[20];
printf("Entre com seu nome\n");
// fgets() tem a mesma funcionalidade de gets() fgets(nome,20,stdin);
// na variável "nome", foi armazenado a frase completa printf("Seu nome é: %s \n",nome); return(0); }
Ainda haverá um problema, caso exista um scanf() antes do fgets(): Exemplo 4: #include <stdio.h>
int main() { char nome[20]; int idade;
printf("Digite sua idade\n"); scanf("%d",&idade);
printf("\nEntre com seu nome\n");
// aqui não será solicitada uma entrada de dados fgets(nome,20,stdin);
printf("Seu nome é: %s \n",nome); return(0); }
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 <stdio.h>
int main() { char nome[20]; int idade;
printf("Digite sua idade\n");
// o scanf ler o conteúdo digitado, depois, o parâmetro *c, // faz com que seja retirado os demais caracteres. scanf("%d%*c",&idade);
printf("\nEntre com seu nome\n");
// agora, tudo perfeito fgets(nome,20,stdin);
// "nome" armazenou apenas a frase digitada printf("Seu nome é: %s \n",nome); return(0); }
Para aprender como compilar arquivos .c no Linux, leia a dica Compilando arquivos .c no Linux. The end! |