Есть ли у меня способ вывести переменную, которая инициализируется в цикле

#c#

#c#

Вопрос:

В моей проблеме я пытаюсь вывести сводку продаж для комиссии сотрудников по продажам. Один из необходимых столбцов — «Продано», который требует, чтобы вы получили количество проданных продуктов для этого конкретного продукта. Проблема, с которой я сталкиваюсь, заключается в том, что переменная numberold инициализируется в цикле While, и, похоже, я не могу ее использовать из-за этого. Каков наилучший вариант для того, чтобы иметь возможность ее использовать. Любые другие советы о том, как сделать мои сообщения более чистыми, также будут оценены, поскольку я чувствую, что есть лучший способ сделать это по сравнению с тем, как я его получаю.

 decimal grossSales = 0; // total gross sales
    decimal earnings; // earnings made from sales
    int product = 0; // the product number
    int numberSold; // number sold of a given product
    decimal commission1 = .09M;
    decimal commission2 = .0925M;
    decimal commission3 = .0701M;
    decimal commission4 = .095M;
    decimal commission5 = .10M;
    decimal commission6 = .083M;
    decimal basePay = 250.00M;
    decimal product1CommEarnings = 0.00M;
    decimal product2CommEarnings = 0.00M;
    decimal product3CommEarnings = 0.00M;
    decimal product4CommEarnings = 0.00M;
    decimal product5CommEarnings = 0.00M;
    decimal product6CommEarnings = 0.00M;
    
    while ( product < 6 )
  {
       product;

     // prompt for and read number of the product sold from user
     Console.Write( "Enter number sold of product # {0} ->   ",
        product );
     numberSold = Convert.ToInt32( Console.ReadLine() );

        // determine gross of each individual product and add to total
        if (product == 1)
        {
            grossSales  = numberSold * 239.99M;
            product1CommEarnings = Math.Round(commission1 * numberSold * 239.99M, 2);

        }
        else if (product == 2)
        {
            grossSales  = numberSold * 129.75M;
            product2CommEarnings = Math.Round(commission2 * numberSold * 129.75M, 2);
        }

        else if (product == 3)
        {
            grossSales  = numberSold * 99.95M;
            product3CommEarnings = Math.Round(commission3 * numberSold * 99.95M, 2);
        }

        else if (product == 4)
        {
            grossSales  = numberSold * 350.89M;
            product4CommEarnings = Math.Round(commission4 * numberSold * 350.89M, 2);
        }
        else if (product == 5)
        {
            grossSales  = numberSold * 100.00M;
            product5CommEarnings = Math.Round(commission5 * numberSold * 100.00M, 2);
        }
        else if (product == 6)
        {
            grossSales  = numberSold * 1000.00M;
            product6CommEarnings = Math.Round(commission6 * numberSold * 1000.00M, 2);
        }
    } // end while loop

    Console.WriteLine("n");
    Console.WriteLine("                   Commission                 Price                   Comm");
    Console.WriteLine("  Sales Summary      Earnings     Sold         Each    Extentsion     Rate");
    Console.WriteLine("  -------------    ----------     ----        -----     ---------     ----");
    Console.WriteLine($"  Base Pay            {basePay:C}                                        ");
    Console.WriteLine($"  Product 1             {product1CommEarnings}                                                      ");
    Console.WriteLine($"  Product 2             {product2CommEarnings}                                                      ");
    Console.WriteLine($"  Product 3             {product3CommEarnings}                                                      ");
    Console.WriteLine($"  Product 4            {product4CommEarnings}                                                       ");
    Console.WriteLine($"  Product 5             {product5CommEarnings}                                                      ");
    Console.WriteLine($"  Product 6            {product6CommEarnings}                                                       ");
  

Комментарии:

1. В: Есть ли у меня способ вывести переменную, которая инициализируется в цикле? A: Конечно. Просто объявите переменную вне цикла. В: Есть ли конкретная проблема с кодом, который вы показали?

2. numberSold объявляется вне цикла с другими переменными, поэтому, если вы получаете ошибку, вы должны поделиться ею, чтобы мы могли работать над решением правильной проблемы

3. Не уверен, как я пропустил ее объявление вне цикла, похоже, все, что мне нужно было сделать, это присвоить переменной. Извините за это и спасибо за помощь.

4. ТАКЖЕ: пожалуйста, рассмотрите возможность использования блока переключения вместо набора операторов «if / else». И обязательно убедитесь, что вы всегда обнаруживаете и обрабатываете случай «ничего из вышеперечисленного»! Что, если вашим крупнейшим продавцом за месяц был «Продукт 7»? 😉

5. @paulsm4 что не так с if / else

Ответ №1:

Вы должны инициализировать numberSold .

 int numberSold = 0; //initial value will be discarded by the loop.
  

Но вы все равно не получите numberSold для каждого элемента, поскольку вы переписываете его в цикле, и печатаемое значение будет значением из последней итерации цикла.

Используйте класс записи или кортеж для сохранения значений с каждой итерации.

Комментарии:

1. Отличное предложение: рекомендую сохранить значения в классе (или классах).