2
respostas

Loop infinito

Olá de novo. No seguinte programa estou tentando não permitir que o usuário insira letras nos campos que são para números, ao digitar letras ele entra em um loop infinito. E outro problemas é que mesmo digitando números diz que não aceita letras. Desde já agradeço.

#include <stdio.h>
#include <stdlib.h>

int main () {
    float dinheiro;
    int pessoas;

    while (1) {

    printf("Deu quanto de dinheiro? \n");
    scanf("%f", &dinheiro);
    if ("%[A-z]") {
        printf ("Nao aceitamos letras!!!");
        continue;
    }

    printf("Quantidade de pessoas: \n");
    scanf("%d", &pessoas);

    float calc =  dinheiro - (pessoas * 3.40);
    printf("Troco de %.2f\n", calc);

    system("pause");
    }
}
2 respostas

Fala, Igor. Beleza?

Quanto ao loop infinito, coloque um getchar(); após cada scanf que ler um número. Isso vai limpar e resolver este problema.

Para testar se foi digitado um float ou uma letra, deixe um loop que vai ler a variável dinheiro, continuamente, até receber um valor float. Veja o código:

#include <stdio.h>
#include <stdlib.h>

int main () {
    float dinheiro;
    int pessoas;

    while (1) {


    printf("Deu quanto de dinheiro? \n");

    while(!scanf("%f",&dinheiro))/*vai ficar neste loop de ler a entrada do usuário enquanto a entrada do usuário for diferente de um valor float ( o ponto de exclamaçao em !scanf("%f",&dinheiro) significa FALSO, ou seja,  indica que vai ficar no loop enquanto a leitura de um número float for falsa)*/
    {    
      while(getchar()!='\n') getchar();//aqui limpa o buffer do teclado para evitar aquele loop infinito que vc teve anteriormente.

      printf ("Nao aceitamos letras!!! \nDigite um valor numerico: \n");

    }
//Se digitou um valor numérico, sai do loop e continua a rotina normalmente
    printf("Quantidade de pessoas: \n");
    scanf("%d", &pessoas);// se quiser utilize a mesma lógica do scanf anterior aqui
    getchar();

    float calc =  dinheiro - (pessoas * 3.40);
    printf("Troco de %.2f\n", calc);    
    } 

}

Espero ter ajudado. Abraço!

Ajudou muito, obrigado!!!