Ir ao conteúdo
  • Cadastre-se

C como saber se o while é loop infinito


herbertbahia

Posts recomendados

@Jorge Curvelo Você ta dividindo x por 10 dentro do loop. Enquanto x não atingir 0, o loop permanece:

#include <stdio.h>

int main() {
  int x, i = 1;

  x = 755;

  while(x){
    i *= x % 10;
    x /= 10;
    printf("Divisão por 10...\n");
    printf("Valor de x: %d\n", x);
    printf("Valor de i: %d\n", i);
  }

  printf("Valor final de i: %d\n", i);

  return 0;
}

image.png.aa874b0c65671cf29ba3b68251a2c962.png

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

18 minutos atrás, Jorge Curvelo disse:

mas nesse caso vai ser enquanto o que?

O único que while(if, for, etc) quer saber é se um valor é verdadeiro ou falso. Na programação 0 é considerado falso, e qualquer outro valor é verdadeiro... incluído números negativos. se ver algo como while( 0 == 0 ) vai dar como resultado true, porque zero é igual a zero, isso gera um true(resultado diferente de zero). Como já lhe explicou Lucca, por enquanto x não valer 0 isso continuará rodando.

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

@Jorge Curvelo    ali no while é como se estivesse usando o tipo bool de boolean ,  e se o valor de x for igual a zero ele seria o false ou falso , e se for diferente de zero ele seria true, verdadeiro .  então ali , enquanto o valor de x for verdadeiro , que é o mesmo que diferente de zero , o loop while continuar a dar voltas .

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

18 minutos atrás, vangodp disse:

O único que while(if, for, etc) quer saber é se um valor é verdadeiro ou falso. Na programação 0 é considerado falso, e qualquer outro valor é verdadeiro... incluído números negativos. se ver algo como while( 0 == 0 ) vai dar como resultado true, porque zero é igual a zero, isso gera um true(resultado diferente de zero). Como já lhe explicou Lucca, por enquanto x não valer 0 isso continuará rodando.

0 é falso na programação em C apenas. Em outras linguagens os valores para verdadeiro ou falso é true e false.

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

40 minutos atrás, Jorge Curvelo disse:

entender porque mesmo colocando apenas 1 letra ou numero no while

 

Não é uma boa maneira de expressar o que acontece nesse comando.

 

Não é de uma letra que está falando: é de uma variável que tem um nome que é uma letra, 'x' no caso. Podia ter dezenas de letras e ia dar na mesma.

 

E se fosse um número? Pois é: também podia ser qualquer número.

 

Linguagens de programação são coisas super formais e são regidas por uma gramática descrita por uma notação própria. Não vou chatear ninguém aqui sequer tentando explicar isso, mas no caso do while vou reproduzir um pedaço da gramática

<iteration-statement> ::= while ( <expression> ) <statement>
                        | do <statement> while ( <expression> ) ;
                        | for ( {<expression>}? ; {<expression>}? ; {<expression>}? ) <statement>

no formato clássico conhecido como Backus-Naur form para os comandos for e while em C

 

E você pode ver que dentro dos parenteses se espera uma expressão. Uma expressão é qualquer coisa que permita obter um resultado numérico. E nessa linguagem 0 é falso. Só zero.

 

Assim você tem sua resposta: você pode ter qualquer coisa lá que se possa avaliar para um número. Uma condição lógica é avaliada em C para um número também: 0 se falso. E assim se fecha o círculo.

 

while(x) funciona desde que x exista, seja uma variável ou uma constante. E é o mesmo que escrever while(x != 0). 

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

6 minutos atrás, arfneto disse:

não faz sentido. Que seria "passasse pelo zero" ?  Na hora de rodar o while() a expressão é avaliada. Seja o que for. ZERO é falso. Só zero.

pelo que entendir o programa vai sempre dividindo um valor uma hora vai dividir tanto que vai ficar negativo

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

@Jorge Curvelo

21 minutos atrás, Jorge Curvelo disse:

pelo que entendir o programa vai sempre dividindo um valor uma hora vai dividir tanto que vai ficar negativo

Não.

Se você tem um loop que divide um número por 10 até que o mesmo atinja 0, não tem como esse número atingir valor negativo.

Calcule o limite de x tendendo ao infinito de qualquer número / x, o resultado é 0.

image.png.22f317660fa20ea4df6fef8e572e2128.png

Ou seja, nem que esse tal número seja um zilhão, o loop vai persistir até que o número atinja 0.

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

1 hora atrás, Jorge Curvelo disse:

pelo que entendir o programa vai sempre dividindo um valor uma hora vai dividir tanto que vai ficar negativo

 

Hum... Essa não é uma dúvida de C ou C++ ou C#. Seria para o forum de matemática e ensino fundamental:

 

dividir um número positivo por outro jamais vai mudar o sinal...

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

Em 24/06/2020 às 20:00, Luís Roberto C. da Silva disse:

0 é falso na programação em C apenas. Em outras linguagens os valores para verdadeiro ou falso é true e false.

Então você me esta dizendo que 0 em outras linguagens não é falso? Que é então? não há coisas como 0==0 em outras linguagens?

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!