Ir ao conteúdo
  • Cadastre-se

C Comando Do While nao repete


Joao_Bilu

Posts recomendados

Pessoal estava tentando montar um menu que realiza operações e se repete enquanto o usuário quiser realizar mais cálculos, entretanto tive dificuldade em usar o comando do while para criar o ciclo. O problema é que ele só roda normal uma vez, mas depois não repete novamente. Como eu corrijo isso? não queria ter que usar uma variável int para responder entre 1(Repete) e 2(Termina), quero usar o sim e não

#include<stdio.h>

int main()
{
    char r;

    do{
        printf("MENU\n");
        printf("Deseja realizar outra operacao[S/N]: ");
        scanf("%c", &r);
    }while((r == 's')||(r =='S'));

    printf("FIM DO PROGRAMA");
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

#include<stdio.h>

int main()
{
    char r;

    do{
        printf("MENU\n");
        printf("Deseja realizar outra operacao[S/N]: ");
        scanf(" %c", &r);
    }while((r == 's')||(r =='S'));

    printf("FIM DO PROGRAMA");
}

 

adicionado 1 minuto depois

um caractere é diferente de uma string por isso voce deve deixar um espaço antes do %c

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Depois que você lê uma letra, fica um [ ENTER ] (\n) no buffer do scanf, quando chega na segunda vez no scanf, ele lê aquele [ ENTER ] e isso faz a condição do do-while falhar. Faça como o @herbertbahia disse, coloque um espaço antes da máscara do scanf, isso obriga o scanf a esvaziar o buffer antes de fazer a leitura.

 

Opcionalmente, você poderia fazer assim também:

scanf(" %c%*c", &r);

Isso limpa o buffer antes de ler o valor de r e limpa de novo após a leitura, ou seja, você "limpa os pés antes de entrar e antes de sair".

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

O espaço antes do %c informa a função scanf() que todos os caracteres 'vazios' (espaço, tabulação '\t', nova linha '\n', etc) devem ser ignorados, então só será capturado pelo %c o primeiro caractere "não vazio".

 

(@AdrianoSiqueira Note que isso não "limpa buffer" que tiver caracteres "não vazios".)

 

E o %*c informa ao scanf que 1 caractere deve ser lido, mas o * indica que esse caractere não será guardado em nenhum variável, logo é descartado, ou seja isso vai descartar o caractere '\n' inserido na entrada padrão (stdin) quando o usuário aperta Enter, esvaziando a stdin (isto é, supondo que o usuário apenas digite 1 letra e pressione Enter como é esperado, senão vai ficar sobrando caracteres na stdin).

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...