当前位置: 首页 > 知识库问答 >
问题:

Do while循环在不满足条件的情况下移动到下一步

龙永福
2023-03-14

这周我刚刚开始学习C#并且正在尝试运行一个简单的代码,当用户输入文本时,它会提示用户输入一个数字,或者当用户输入一个负数时,它会提示用户输入一个正数(因此,对于文本是一个布尔运算,对于负数是一个if语句)。如果他们输入了一个有效的(正)数字,程序将继续进行其余的步骤。

然而,在此代码中,如果用户输入一个负数,然后输入一个文本,然后输入另一个负数,依此类推,似乎会中断循环并继续下一个操作。

代码是一个更大的程序的一部分,所以我把它缩小了,只抽出最关键的部分来运行。有人能看出我错过了什么吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IncomeTaxCalculator
{
    class IncomeTax
    {
        public static void Main()
        {
            double income;
            income = income_input();
            show_output(income);
        }
        public static double income_input()
        {
            double income; string income_string; bool bad_value = true;
            do
            {
                Console.Write("What is your total income: ");
                income_string = Console.ReadLine();
                if (double.TryParse(income_string, out income))
                {
                    bad_value = false;
                }
                else
                {
                    Console.WriteLine("Enter your income as a whole-dollar numeric figure.");
                }
                if (income < 0)
                {
                    Console.WriteLine("Your income cannot be a negative");
                }
            } while (bad_value || income < 0);
            return income;
        }
              public static void show_output(double income)
        {
            Console.WriteLine("Your income is " + income);
            Console.WriteLine("\n\n Hit Enter to exit.");
            Console.ReadLine();
        }
    }
}

共有1个答案

陈和裕
2023-03-14

我知道这已经被接受了,但这可以在一个简单得多的循环中完成。为什么不创建一个无限循环,并在满足值时创建break/return。而不是检查无效的输入,搜索有效的输入。

我不会详细说明为什么这是一个更容易接受的解决方案,考虑一下给出的指令,如果您输入了一个无效的输入,那么您的指令就是错误的。相反,检查积极的结果。看这个!!

static double income_input()
{
    double income = double.NaN;
    while (true)
    {
        Console.WriteLine("What is your income?:");
        if (double.TryParse(Console.ReadLine(), out income) && income > 0)
            return income;
        Console.WriteLine("Invalid input. Please enter a valid number greater than zero.");
    }
}

实际上,我们在这里所做的只是使用while(true)创建了一个无限循环。所以现在循环永远不会结束,除非我们明确地告诉它结束。

如果您想要尽可能短的代码,可以使用一些C#7语法来处理内联变量。

static double income_input()
{
    while (true)
    {
        Console.WriteLine("What is your income?:");
        if (double.TryParse(Console.ReadLine(), out double income) && income > 0)
            return income;
        Console.WriteLine("Invalid input. Please enter a valid number greater than zero.");
    }
}

编码快乐!。

 类似资料:
  • 问题内容: 我正在使用构建Web POST参数的方法,但是有一些值仅在它们不存在的情况下才想添加。 效果很好,但是如果我将变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码): 我希望这已经足够清楚了,有人知道如何解决吗? 问题答案: 创建初始字母后,您必须单独添加密钥: Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解: 但这不是很可读。 另一

  • 所以我必须在eclipse中为我的类创建一个java项目。分配是创建一个程序,允许用户在程序中输入整数,直到输入某个整数(42)。输入整数(42)后,程序将为1。平均输入的所有数字。2、显示输入的最小值和最大值。3、输入的数字总数。这些必须在不计算(42)的情况下进行计算。这就是我目前所拥有的。我可以从用户那里获得输入,一旦他们输入42,程序就会停止并显示总数,但包括42。我不知道如何为输入添加一

  • 问题内容: 我需要让用户输入一个数字以用作范围的开始,然后输入另一个数字作为范围的结束。起始编号必须为0或更大,结束编号不能大于1000。两个数字都必须被10整除。我找到了满足这些条件的方法,但是如果不满足这些条件,我的程序只会告诉用户他们的输入不正确。我是否可以对它进行编码,以便在用户输入后进行检查以确保满足条件,如果条件没有环回,请再次输入。这是我到目前为止的代码。 问题答案: 轻松做:

  • 我需要要求用户输入一个数字作为范围的开始,然后输入另一个数字作为范围的结束。开始数必须大于等于0,结束数不能大于1000。两个数字都必须能被10整除。我已经找到了满足这些条件的方法,但是如果不满足这些条件,我的程序只会告诉用户他们的输入不正确。我是否可以对其进行编码,以便在用户输入后,它将检查以确保满足条件,如果不满足条件,则返回并再次输入。这是我目前掌握的代码。

  • 问题内容: 我有一个数组,当对象被修改时,我会将对象推送到该数组。如果用户按下,那么我将遍历并为他们应用适当的API调用。 如果API调用成功完成,我想从中删除该项目,否则将其保留在内部并通知用户某些项目未成功保存。我目前有这个(在AngularJS中) 有更好的方法吗? 问题答案: 您已经在使用诺言,您可能希望端到端地兑现。另外,您过早地兑现了承诺。 假设您不愿自我证明自己处于次优状态,那么您仍

  • 我正在制作一个汽车游戏。只有“开始”、“停止”、“退出”命令。无法识别任何其他命令。 除了“退出”之外,所有命令都可以正常工作。使用while循环,它会执行和打印else语句: 命令=“退出”应该呈现当条件,因此跳过前面只执行外部的其他语句。为什么它执行其他两个语句,甚至认为同时条件不满足?