Olá eu tenho dúvidas em linguagem C.
Estou tentando executar esse programa abaixo, mas ele entra em loop infinito após eu digitar o um para continuar por várias vezes.
Por que não posso digitar 1, quantas vezes eu quiser, voltar na funcaod2, quantas vezes eu quiser???
#include <stdio.h>
#include <stdlib.h>
int d = 0;
float b;
float f;
float c;
void funcaod2() {
printf(“digite um numero: “);
scanf(”%f”, &b);
f = 2 * b;
c += f;
system(“cls”);
printf(“O valor total %.2f\n”, c);
printf(“Digite 1: “);
scanf(”%d”, &d);
while (d == 1) {
funcaod2();
} else {
exit(0);
}
}
}
int main() {
funcaod2();
return 0;
}
Bom dia Pessoal, me desculpe a falta de educação!!
Mas a respeito desse código, já me informaram diversos comandos que limpa o buffer, evita entrar no loop como o breack. Mas não resolve o problema, só sai do programa, cancelando o entra e sai da funcaod2!!!
Olá gabol!
Muito obrigado!
Copiei e colei seu código, mas continua entrando no loop. Ele começa a somar os últimos valores de f em c:
Ia colocar o passo a passo do resultado, mas só posso postar uma imagem.
Então a última!!
Vamos la
vc esta chamando o seu codigo de forma recursiva e vc tem uma variavel global que vc setou 1 anteriormente. eu mudaria o seu programa para evitar o loop while e evitar recursão. divida a sua logica entre uma função de leitura e uma função de controla o fluxo
alias: estude as funções que vc esta utilizando. por exemplo o scanf tem um detalhe interessante: em caso de sucesso ele retorna quantos elementos ele conseguiu escanear com sucesso da entrada de dados.
scanf ...
RETURN VALUE
On success, these functions return the number of input items successfully matched and assigned; this can be fewer than provided for, or even zero, in the event of an early matching failure.
veja esse programinha
$ cat a.c
#include<stdio.h>
int main() {
int i=0, j=0;
printf("digite algo: ");
j = scanf("%d", &i);
printf("scanf leu %d, retorna %i\n",i,j);
}
veja duas execuções
$ ./a.out
digite algo: 4
scanf leu 4, retorna 1
$ ./a.out
digite algo: lol
scanf leu 0, retorna 0
ou seja, vc pode usar o retorno de scanf para saber se leu com sucesso ou não. no caso vc espera receber 1 e vc pode fazer um laçodo { } while ( .... );
ate que vc leu algo util
só não faça chamadas recursivas com variaveis globais. vai ser bem dificil de controlar o estado.