Jump to content
Fórum Script Brasil
  • 0

problemas com o laço while


samyr

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0
Guest --Caio --

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 to comment
Share on other sites

  • 0
Guest --caio --

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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...