【问题标题】:C# console.write showing statementC# console.write 显示语句
【发布时间】:2016-08-15 13:54:58
【问题描述】:

这是我的代码的一部分,我正在尝试让 console.write 仅显示“请重新输入大于 20 的数字:”的新语句。

问题是当我运行我的代码时,它显示“请重新输入大于 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

【问题讨论】:

  • 如果您只想显示一次“输入燃料量”消息,请不要将其放入循环中。
  • "How can I make it not to show first write statement" - 通过删除第一个写语句?
  • 我希望第一个语句首先显示,但如果用户输入错误,我希望仅显示第二个语句
  • 当您打印下一条语句时,只需使用 \r,以便它返回到行首并覆盖您的原始写入。您无需为此清除控制台。

标签: c# if-statement console.writeline


【解决方案1】:

Console.Write("Enter amount of fuel used in litres : "); 行移到while 循环之外。在您的示例中,它位于 while 循环内,因此每次输入错误答案时都会重复。如果将它移到循环前面,它只会被写入控制台一次。

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

【讨论】:

  • 是的,愚蠢的我,我没想到它在循环中
  • @C.Knight 如果它在循环之外,它如何多次显示同一行文本?
  • @lufee:不用担心。如果您认为这是正确的答案,请点击答案左侧的灰色勾号确认,将其变为绿色。
【解决方案2】:

您可以使用 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;
}

【讨论】:

  • 这将清除屏幕,但不会阻止根据要求重写第一行。
  • 清除控制台中的所有文本可能是不可取的。这是一把大锤,凿子更合适。
  • 清除整个屏幕的文本实际上是 OP 所说的 - 无论这是否是问题的本意是“我怎样才能让它不显示第一个写语句??”跨度>
  • @C.Knight 不,当他说“我怎样才能让它不显示第一个写语句??”时,我认为这不是 OP 的意思。这是有道理的,因为在原始代码中,当代码循环时,输出将是"Please re-enter number greater than 20 : Enter amount of fuel used in litres :"
【解决方案3】:
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;
    }

【讨论】:

  • 鉴于它是循环中的第一件事,而且您只在第一次完成它时才这样做,将代码放在循环之外将是更简洁的代码。
【解决方案4】:

如果我理解正确,你的问题只是算法问题:

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

通过将第一个写出循环,它只显示第一次,然后不再出现。如果你想让它完全消失,只需在 else 语句中添加一个Console.Clear(); 以擦除之前显示的内容,就完成了。

【讨论】:

  • 为什么你们都清空控制台只写一次文字?
  • Console.clear() 正如我所说的那样不是强制性的。但是如果我理解正确的话,他会因为输入错误时再次显示“输入使用的燃料量”语句而感到困扰,自然将其放在循环之外,对吧?
【解决方案5】:

我建议将循环改为无限;如果问题应该被陈述一次 将其拉出循环:

    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;            
    }

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 2011-06-08
    • 2021-03-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多