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

problemas com o laço while


samyr

Pergunta

Estou com problemas a algum tempo e não consigo soluciona-lo,

e o seguinte, o programa roda sem problemas de início mas na segunda

repetição ele pula umas etapas esse programinha abaixo é apenas um

exemplo do que está acontecendo, se alguém encontrar o que há de errado

Agradeço.

#include <stdio.h>
main(){
      char sa;
      int s,b;
       while(b!='s'){
           printf("digite (h)ou(m): \n");
           scanf("%c",&sa);
           if((sa == 'h')||(sa == 'H')){s = 1;}
           else{
                if((sa == 'm')||(sa == 'M')){s = 2;}
                else{s = 0;}}  
           printf(" %d \n",s);
           printf("sair(s)\n");
           b = getche();}
getche();
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

não qual o seu compilador, mas alguns deles incluindo o DEV-cpp (todas as verões) posuem um tipo de bug para se ler dados do tipo char esperimente por essa linha de comando fflush(stdin); antes do scanf("%c",&sa); já tive problemas com isso tb =/

espero ter ajudado =]

Link para o comentário
Compartilhar em outros sites

  • 0

o primeiro problema foi apenas batendo o olho =P

eu copiei o codigo e fui compilalo e

outro problema que eu encontrei foi um erro de logica:

esperimente trocar a variavel b pela variavel sa dentro da condição do laço for

pois ela é que esta recebendo os valore h, m e s que é a condição para ela sair xD

#include <stdio.h>
#include <windows.h>

main()
{
char sa;
int s,b;
while(sa!='s')
{
             printf("\ndigite (h)ou(m)ou(s)para sair: \n");
             fflush(stdin);
             scanf("%c",&sa);
             if((sa == 'h')||(sa == 'H'))
             {
                    s = 1;
             }
             else
             {
                    if((sa == 'm')||(sa == 'M'))
                           {
                              s = 2;
                           }
                    else
                    {
                        s = 0;
                    }
             } 
             printf(" %d \n",s);
}
_sleep(5000);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Olá,

Analisando o código também pude perceber que a váriavel b não foi inicializada.

É um bom costume de programação inicializar a váriavel antes de utilizá-la numa comparação(teste do seu conteúdo), pois poderá acotencer de não entrar no laço primeiramente por causa do lixo na memória.

Também seria bom declarar b como char e não int só pela questão de legibilidade do código. ;)

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...