Sequence code of numbers returns the incorrect sum of numbers C#

Asked

Viewed 114 times

0

I created a code that collects a sequence of integer numbers that only runs out when the zero number is typed. At the end print the sum of the numbers is wrong where there is always a number unless expected.

Digite um número: 1
Digite um número: 2
Digite um número: 3
Digite um número: 0
A média dos número é 5 // Era pra ser 6

The code:

using System;

namespace TesteRepeticao1
{
    class Program4
    {
        static int Main(string[] args)
        {
            int somanumero = 0, numero;
            Console.Write("Digite um número: ");
            numero = Convert.ToInt32(Console.ReadLine());
            do
            {
                if (numero != 0)
                {
                    Console.Write("Digite um número: ");
                    numero = Convert.ToInt32(Console.ReadLine());
                    somanumero += numero;
                }
            } while (numero != 0);
            Console.Write($"A soma dos número é {somanumero}");
            Console.ReadKey();
            return 0;
        }
    }
}

3 answers

2

I would create a global variable to receive the sum, do the operations inside the loop and at the end display the value of the global variable, taking that condition, because if the value is zero it will not change the sum and the loop will be finished.

using System;

namespace TesteRepeticao1
{
    class Program4
    {
        static int Main(string[] args)
        {
            int somanumero = 0, numero;
            do
            {
                Console.Write("Digite um número: ");
                numero = Convert.ToInt32(Console.ReadLine());
                somanumero += numero;

            } while (numero != 0);
            Console.Write($"A soma dos número é {somanumero}");
            Console.ReadKey();
            return 0;
        }
    }
}

2


Before the do need to add the first number, otherwise it is lost when executing the ReadLine() within the loop:

numero = Convert.ToInt32(Console.ReadLine());
somanumero += numero;
do
{
 .... resto do código
  • Solved the problem, now yes it returns the desired result.

2

One way to accomplish this task is to perform the first sum before performing the repetitions:

using System;

namespace TesteRepeticao1
{
    class Program4
    {
        static int Main(string[] args)
        {
            int somanumero = 0, numero;
            Console.Write("Digite um número: ");
            numero = Convert.ToInt32(Console.ReadLine());
            if (numero != 0)
                somaNumero = numero; //assim você já guarda o valor dessa primeira iteração com o usuário
            do
            {
                if (numero != 0)
                {
                    Console.Write("Digite um número: ");
                    numero = Convert.ToInt32(Console.ReadLine());
                    somanumero += numero;
                }
            } while (numero != 0);
            Console.Write($"A soma dos número é {somanumero}");
            Console.ReadKey();
            return 0;
        }
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.