Пожалуйста, помогите, я очень запутался с утверждением if ниже - PullRequest
0 голосов
/ 16 декабря 2010

Я хочу, чтобы пользователь ввел число, но если оно меньше нуля, я хотел бы показать сообщение об ошибке, а затем повторить цикл и попросить пользователя ввести другое число. Вот код, который у меня есть на данный момент.

  // this determines what the loop does.
for (int CustPos = 0; CustPos < LineNum; CustPos = CustPos + 1)  
{
   // this asks the user to enter the sales figures
   Console.Write("enter sales figures for" + customer[CustPos] + "  "); 
   // this is user's input is read in and stored.
   sales_figures[CustPos] = Double.Parse(Console.ReadLine()); 

   if (sales_figures[CustPos] < MIN_SALES_FIGURE) //True - continue
   {
      Console.WriteLine("");
      Console.WriteLine("entry invalid");
      Console.WriteLine("enter another value");
   }
   else//FALSE -> Go back to start of loop
   {
       Console.WriteLine("");
   }


   //this section displays the cust name, sales figure 70/30.
   Console.WriteLine(" ");
   fee_payable[CustPos] = (sales_figures[CustPos] / 100.0) 
               * licence_fee_in_percent[CustPos];
   Console.WriteLine(customer[CustPos] + 
                 " ----------- " + fee_payable[CustPos]);
   Console.WriteLine("Licence fee to be paid in GBP is :" + 
                 fee_payable[CustPos]);
   seventy_percent_value = ((fee_payable[CustPos] / 10.0) * 7);
   Console.WriteLine("70 percent of this fee is" + 
                  seventy_percent_value);
   thirty_percent_value = ((fee_payable[CustPos] / 10.0) * 3);
   Console.WriteLine("30 percent of this fee is" + 
                   thirty_percent_value);
   Console.WriteLine(" ");
}

. Пожалуйста, помогите всем совет будет с благодарностью!

Спасибо

Ответы [ 5 ]

3 голосов
/ 16 декабря 2010

Я думаю, что цикл с заданным временем был бы лучше, псевдокод:

userInput = -1
do
{
    userInput = Console.ReadLine
}
while (userInput <0)

Колин Э.

1 голос
/ 16 декабря 2010

Вы на правильном пути, просто посмотрите на ключевое слово Продолжить

Это пример в ссылке:

using System;
class ContinueTest 
{
    static void Main() 
    {
        for (int i = 1; i <= 10; i++) 
        {
            if (i < 9) 
            {
                continue;
            }
            Console.WriteLine(i);
        }
    }
}

Примечание: The continue statement passes control to the next iteration of the enclosing iteration statement in which it appears.

0 голосов
/ 16 декабря 2010

Используйте цикл WHILE в сочетании с вашим IF:

continueflag = 0;
while (continueflag == 0)
{
    sales_figures[CustPos] = Double.Parse(Console.ReadLine());

    Console.WriteLine("");

    if (sales_figures[CustPos] >= MIN_SALES_FIGURE) {
        Console.WriteLine("entry invalid");
        Console.WriteLine("enter another value");
    } else continueflag = 1;
}
0 голосов
/ 16 декабря 2010

Вместо if вам понадобится некоторое время:

while( sales_figure[CustPos] < 0 )
{
    Console.Write("enter sales figures for" + customer[CustPos] + "  ");

    sales_figures[CustPos] = Double.Parse(Console.ReadLine());
}

Что гарантирует, что он будет продолжать запрашивать, пока они не введут что-то большее, чем ноль.

Продолжайте, НЕ делает то, что вы хотите. Продолжить означает «двигаться дальше и игнорировать эту итерацию», что означает, что у вас будет неправильное значение для этого клиента.

0 голосов
/ 16 декабря 2010
if (sales_figures[CustPos] < MIN_SALES_FIGURE) //True - Continue                   //FALSE -> Go back to start of loop

На самом деле у вас нет никакого кода, чтобы вернуть его к началу цикла.

Я рекомендую сначала записать все как псевдокод, а затем превратить его в код:

if (number entered is too low)
    then restart loop
    otherwise carry on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...