uso de scanf junto com fgets + \n no final

uso de scanf junto com fgets + \n no final

por Rafael Moraes -
Número de respostas: 3
olá

estou tentando utilizar o seguinte código para obter um número seguido de uma frase:

#include
#define TAM 50

int main (void)
{
int a;
char b[TAM+1];

printf("digite um número: ");
scanf("%d", &a);
printf("digite uma frase: ");
fgets(b,TAM,stdin);

printf("%d, %s\n", a, b);
return 0;
}

mas ele parece ignorar o uso de fgets. se eu comentar a linha que contém a função scanf, o esperado ocorre sem problemas. acredito que o problema ocorre porque scanf 'deixa' um \n que é lido supostamente por fgets. alguém tem idéia de como resolver isso, ou alguma forma melhor de implementação?

obrigado e abraços
Em resposta à Rafael Moraes

Re: uso de scanf junto com fgets + \n no final

por João Francisco Amorim Enomoto -
Hm... eu não tenho certeza, mas não sei se ele pode não estar interpretando o stdin corretamente, embora aparentemente esteja tudo correto. Verifique se a string b não está retornando um \n e volte a informar o resultado.

Abraços!
Em resposta à Rafael Moraes

Re: uso de scanf junto com fgets + \n no final

por Marco Dimas Gubitoso -
É exatamente isso o que acontece. O scanf não pega o \n.  Para isso, basta colocar um espaço em branco no formato, por exemplo:

scanf("%d ", &a);

mas isso não faz o programa funcionar como vc quer, pois desta forma o scanf lerá TODOS os espaços em branco antes de retornar.

Uma solução melhor é:

include <stdio.h>
#define TAM 50

int main (void)
{
  int a;
  char b[TAM+1];
 
  printf("digite um número: ");
  scanf("%d", &a);
  printf("digite uma frase: ");
  scanf(" "); /**** engole os espaços, tabs e \n's ****/
  fgets(b,TAM,stdin);
 
  printf("%d, %s\n", a, b);
  return 0;
}