Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda mostrar dados


Leo Silva

Pergunta

Eu sou novato ainda e como todo novato tenho as minhas duvidas, esse algoritmo (?) da o seguinte erro: ele armazena a variável evento, pula a corrida e volta a armazenar o tempo. Eu quis deixar tudo separado por curiosidade mesmo, já testei com todos os dados sendo armazenados no primeiro printf e deu certo. ^^

#include <conio.h>
#include <stdio.h>

int main()
{
    int evento;
    char corrida;
    float tempo;

    printf("Digite o numero do evento\n");
    scanf("%d", &evento);
    
    printf("Digite qual o nome da corrida\n");
    scanf("%c", &corrida);
    
    printf("Digite o tempo estimado de termino\n");
    scanf("%f", &tempo);
    
    printf("O tempo na corrida %c do evento de numero %d foi de %f \n", corrida, evento, tempo);
    
    getch();
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Esse "problema" não é (exatamente) culpa sua. A função scanf é uma droga. Radical, eu sei, mas ela tem tantos problemas associados a ela que seria melhor simplesmente não usá-la.

Primeiro vou explicar o que está acontecendo.

A função scanf lê apenas o que você pede para ela ler. No seu caso, você está pedindo para ela ler um número, e apenas isso.

Só que temos um problema: quando você está digitando o valor no console, você não está digitando apenas um número...

Mas como não, Durub?! Eu tenho certeza que estou digitando apenas o número!

Certo, eu acredito em você! Mas tem um detalhe: a tecla Enter. Quando você está inserindo o número, além do número você também está inserindo uma nova linha.

Ou seja, seria mais ou menos isso:

1. Você digita "125"

2. Você aperta enter

3. O programa recebe, na verdade, "125\n", e não "125"

4. O seu scanf lê "125" e deixa "\n" sobrando na entrada

O que acontece é que, quando o segundo scanf (da corrida) vai rodar, ele lê esse \n que está no buffer de entrada. (stdin)

Agora, vou sugerir umas soluções para o seu problema.

Solução 1) Você pode ler o \n direto no scanf.

Trocando "scanf("%d", &evento)" para "scanf("%d%*c", &evento)", você estará lendo um caractere (\n) e o ignorando (é isso que o * no %*c faz).

Solução 2) Você pode parar de usar o scanf diretamente e usar fgets + sscanf. (recomendo)

Exemplo:

char buf[1024];
int evento;
char corrida;
float tempo;

fgets(buf, 1024, stdin);
sscanf(buf, "%d", &evento);

fgets(buf, 1024, stdin);
sscanf(buf, "%c", &corrida);

fgets(buf, 1024, stdin);
sscanf(buf, "%f", &tempo);

Isso elimina (quase) todos os problemas associados ao recebimento de input do usuário.

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...