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
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!
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;
}
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;
}
Em resposta à Marco Dimas Gubitoso
Re: uso de scanf junto com fgets + \n no final
por Rafael Moraes -
perfeito gubi, muito obrigado!