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

Problema Codigo [Iniciante]


Guilherme MM

Pergunta

Estou com um problema em um código iniciante. Gostaria da ajuda de vocês. Eu compilo o programa perfeitamente mais na hora da leitura de uma das variáveis o código salta e simplismente passa pra proxima variável. Vou postar a parte do codigo que estou com esse problema. Agradeço.

Código:

#include<conio.h>
#include<stdio.h>
#include<ctype.h>
int main()
{
    int cod,numh,a=1,val,salini,auxali;
    char tu,cat;
    printf("Trabalhador %d",a);
        printf("\nCodigo do trabalhador: ");
        scanf("%d",&cod);
        printf("Numero de horas trabalhadas: ");
        scanf("%d",&numh);
        printf("Turno: %c",tu);
        scanf("%c",&tu);
        tu=toupper(tu);
        printf("Categoria: ");
        scanf("%c",&cat);
        cat=toupper(cat);
        getch();
    return(0);
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

cara não me pergunta porque mas eu descobri aqui q um espaco antes do %c deve resolver seu problema.

exemplo, faca assim:

scanf(" %c",&tu);
e assim:
scanf(" %c",&cat);

sempre ponha um espaco antes do %c quando for dar scanf em variaveis char.

testei o seu codigo sem o espaco aqui e realmente ele pula um scanf().

agora a explicacao pra isso, gostaria muito de ouvir de qualquer um q puder explicar.

Link para o comentário
Compartilhar em outros sites

  • 0

O problema é que o scanf pega o próximo caractere do stdin(que são todas as entradas do teclado),

Quando você executa o scanf você aperta a tecla do caractere e depois o enter, esses 2 "comandos" vão pro stdin. O scanf pega o primeiro caractere do stdin.

Dependendo do OS usado, existem soluções diferentes, em windows por exemplo você pode usar a função fflush(stdin) após um scanf;

Em *NIX, você precisa ler o stdin até o final.

Algo mais ou menos assim:

int __c;
while( (__c = fgetc(stdin)) != EOF && __c != '\n' ){}
E executar isso após um scanf, para garantir que o próximo vai ser executado com segurança. Uma maneira fácil de comprovar isso, usando o código aí encima. A variável que "pula" é "tu", ao final do script, se você fizer assim:
printf( "Final do programa, testar a variavel tu.%cSe tu for um newline(enter), essa linha vai estar embaixo da outra :)" , tu );
Note que se você usar a seguinte estrutura:
scanf("\n%c" , &tu);

Deve funcionar também!

Bom, acho que é isso :S, se tiver alguma merda escrita é só falar ;)

Editado por p4t0X
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,2k
    • Posts
      652k
×
×
  • Criar Novo...