Multiply n numbers in c

0

What reason for my code, regardless of the numbers typed multiply with the number that I placed for the condition of the loop to be false? I just wanted to multiply the values I typed and not to multiply the number to leave the loop.

#include <stdlib.h>

int main()
{

int multi=1, val;

do
{
printf("Digite um valor");
scanf("%d",&val);
multi= multi*val;
}
while(val!=0);
printf("%d",multi);
return 0;

}
    
asked by anonymous 30.08.2018 / 23:20

1 answer

2

What is happening is that typing 0 will multiply by multi and so the result gives 0

do
{
printf("Digite um valor");
scanf("%d",&val); // ao inserir 0
multi= multi*val; // multi= multi * 0
 }while(val!=0);  // para o ciclo
 // multi vai ter o valor de 0

The way to fix it is to not let 0 multiply by multi and therefore, type 0 for soon the cycle, for example:

  while(1) //ciclo infinito
    {
    printf("Digite um valor");
    scanf("%d",&val); // ao inserir o 0
    if(val==0) // val==0 -> true
        break; // sai fora do ciclo
    multi= multi*val; //multi NÃO multiplica por 0
    }

See these differences:

while(1) // é igual a dizer 'while(true)' ou seja, é sempre verdade, ciclo infinito
{
scanf("%d",&val); 
if(val==0) //o ciclo é parado AQUI
   break;
//caso val==0 este pedaço de codigo nao é executado
}
do{
scanf("%d",&val); 
//caso val==0 este codigo é executado
}while(val==0) // o ciclo é apenas parado AQUI

Although these codes are very similar, it can make a difference, as is the case.

No Ideone Code

Could also do this:

int multi=1, val=1;
    do
    {
    multi= multi*val;
    printf("Digite um valor"); 
    scanf("%d",&val); // caso seja inserido 0
    }while(val!=0); // PARA logo o ciclo
    
30.08.2018 / 23:24