2016-08-15 3 views
0

Это часть моего кода, и я пытаюсь сделать console.write для отображения новой инструкции «Пожалуйста, введите только номер больше 20:».C# console.write statement statement

Проблема заключается в том, что когда я запускаю свой код, он показывает «Пожалуйста, введите номер больше 20:», а также предыдущее заявление («Введите количество топлива, используемого в литрах:»). в одной строке.

Как я могу заставить его не показывать первое заявление о записи ???

static double InputFuel() 
    { 
     double fFuel; 
     string text; 
     bool badValue = true; 
     do 
     { 
      Console.Write("Enter amount of fuel used in litres : "); 
      text = Console.ReadLine(); 
      if (double.TryParse(text, out fFuel) && fFuel >= 20) 
      { 
       badValue = false; 
      } 
      else 
      { 
       Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
       Console.Write("Please re-enter number greater than 20 : "); 
      } 
     } while (badValue); 
     return fFuel; 
    }//end InputTemp 
+0

Console.Clear() https://msdn.microsoft.com/en-us/library/system.console.clear(v=vs.110).aspx –

+2

Если вы хотите показать «Enter amout of топлива "один раз, то не ставьте его в петлю. – Chris

+2

'' Как я могу заставить его не показывать первый оператор записи? '- удалив первый оператор записи? – David

ответ

5

переместить линию Console.Write("Enter amount of fuel used in litres : "); снаружи в то время как петли. В вашем примере он находится внутри цикла while, поэтому он повторяется каждый раз, когда вводится неправильный ответ. Если вы переместите его перед циклом, он будет записан только один раз на консоль.

... 
bool badValue = true; 
Console.Write("Enter amount of fuel used in litres : "); 
do 
{ 
    text = Console.ReadLine(); 
    ... 
+0

Да, глупо мне, я не думал, что это было в цикле – lufee

+0

@ C.Knight, если он находится вне цикла, как бы он отображал одну и ту же строку текста несколько раз? – user1666620

+1

@lufee: Не беспокойтесь. Если вы считаете, что это правильный ответ, пожалуйста, подтвердите его, нажав на серый тик слева от ответа, сделав его зеленым. –

0

Вы можете использовать Console.Clear(), чтобы очистить текущее содержимое Консоли. https://msdn.microsoft.com/en-us/library/system.console.clear(v=vs.110).aspx

Например

static double InputFuel() 
{ 
    double fFuel; 
    string text; 
    bool badValue = true; 
    do 
    { 
     Console.Write("Enter amount of fuel used in litres : "); 
     text = Console.ReadLine(); 
     if (double.TryParse(text, out fFuel) && fFuel >= 20) 
     { 
      badValue = false; 
     } 
     else 
     { 
      Console.Clear(); 
      Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
      Console.Write("Please re-enter number greater than 20 : "); 
     } 
    } while (badValue); 
    return fFuel; 
} 
+0

Это очистит экран, но не предотвратит переписывание первой строки в соответствии с запросом. –

+1

Возможно, нет необходимости очищать консоль всего текста. Это кувалда, где долото более уместно. – user1666620

+0

Очистка всего экрана текста - это то, что сказал ОП - независимо от того, был ли этот вопрос задан «Как я могу заставить его не показывать первый оператор записи»? –

0

Я предлагаю изменения в петлю бесконечной один; если вопрос должен быть указан только раз вытащить его из петли:

Console.Write("Enter amount of fuel used in litres : "); 

    while (true) { 
     text = Console.ReadLine(); 

     if (!double.TryParse(text, out fFuel)) 
      Console.Write("Please re-enter number in correct format: "); 
     else if (fFuel <= 0) 
      Console.Write("Please re-enter number greater than 0 : "); 
     else if (fFuel >= 20) 
      Console.Write("Please re-enter number less than 20 : "); 
     else 
      break;    
    } 
0
static double InputFuel() 
    { 
     double fFuel; 
     string text; 
     bool badValue = true; 
     bool notFirst = false; 
     do 
     { 
      if(!notFirst) 
       Console.Write("Enter amount of fuel used in litres : "); 
      notFirst = true; 
      text = Console.ReadLine(); 
      if (double.TryParse(text, out fFuel) && fFuel >= 20) 
      { 
       badValue = false; 
      } 
      else 
      { 
       Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
       Console.Write("Please re-enter number greater than 20 : "); 
      } 
     } while (badValue); 
     return fFuel; 
    } 
+1

Учитывая, что это первое, что происходит в вашем цикле, и вы только когда-либо делаете это в первый раз, это будет намного более чистый код, чтобы просто положить эту запись за пределы цикла. – Chris

0

Если я правильно понял, ваша проблема только алгоритмическая проблема:

static double InputFuel() 
    { 
     double fFuel; 
     string text; 
     bool badValue = true; 
     Console.Write("Enter amount of fuel used in litres : "); 
     do 
     { 
      text = Console.ReadLine(); 
      if (double.TryParse(text, out fFuel) && fFuel >= 20) 
      { 
       badValue = false; 
      } 
      else 
      { 
       Console.Clear(); 
       Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
       Console.Write("Please re-enter number greater than 20 : "); 
      } 
     } while (badValue); 
     return fFuel; 
    }//end InputTemp 

При тушении сначала пишите из цикла, он только показывает первый раз, а затем снова не возвращается. Если вы хотите, чтобы он полностью исчез, просто добавьте Console.Clear(); в оператор else, чтобы стереть то, что было показано ранее, и все сделано.

+0

Почему вы оба очищаете консоль * и * только один раз пишете текст? – user1666620

+0

Console.clear() не является обязательным, как я уже сказал. Но если я правильно понял, его беспокоит тот факт, что оператор «Введите количество топлива используется» снова отображается, когда дается плохой ввод, естественно вывести его за пределы цикла, верно? – Dijdkay