c#无限循环帮助基础编程

本文关键字:编程 帮助 无限循环 | 更新日期: 2023-09-27 18:15:22

我正在学习c#编程的第二季度,我正在开发一个POS应用程序。我有我的windows窗体创建,我有我的基本代码完成了第一周它被分配。现在我必须通过确保只有正确的数据可以输入来"白痴证明"我的代码。以下是目前为止的内容:

private void btnAddItem_Click(object sender, EventArgs e)
{
    //Declare variables
    double dblSalesTax = 0, dblPrice, dblTax, dblSalesPrice;
    string strItem, strTaxAdded;
    int intQuantity;
    bool diffTest = false;
    //Process user input
    while (!diffTest)
    {
        diffTest = double.TryParse(txtSalesTax.Text, out dblSalesTax);
    }   
    while (dblSalesTax < 0 || dblSalesTax > 25)
    {
        MessageBox.Show("Please enter a valid tax.");
        txtSalesTax.Clear();
        diffTest = false;
    }
    intQuantity = Convert.ToInt16(txtQuantity.Text);
    dblPrice = Convert.ToDouble(txtPrice.Text);
    dblSalesPrice = dblPrice * intQuantity;
    strItem = cbxItem.Text;
    intQuantity = Convert.ToInt16(txtQuantity.Text);
    dblSubtotal += dblSalesPrice;
    if (chkTaxExempt.Checked)
    {
        dblTax = 0;
        strTaxAdded = "";
    }
    else
    {
        dblTax = dblSalesPrice * dblSalesTax;
        strTaxAdded = "*";
    }
    dblTaxTotal += dblTax;
    lbxTally.Items.Add(strItem + ", " + dblSalesPrice.ToString("C") + strTaxAdded);
    //Reset Form
    txtPrice.Clear();
    txtQuantity.Clear();
    chkTaxExempt.Checked = false;
    cbxItem.Focus();
}

private void btnEndSale_Click(object sender, EventArgs e)
{
    dblGrandTotal = dblSubtotal + dblTaxTotal;
    lbxTally.Items.Add("");
    lbxTally.Items.Add("");
    lbxTally.Items.Add("Subtotal: " + dblSubtotal.ToString("C"));
    lbxTally.Items.Add("Tax Total: " + dblTaxTotal.ToString("C"));
    lbxTally.Items.Add("Grand Total: " + dblGrandTotal.ToString("C"));
}
private void btnPay_Click(object sender, EventArgs e)
{
    double dblPay, dblChange;
    dblPay = Convert.ToDouble(txtPay.Text);
    dblChange = dblPay - dblGrandTotal;
    lbxTally.Items.Add("");
    lbxTally.Items.Add("Amount Paid: " + dblPay.ToString("C"));
    lbxTally.Items.Add("Change: " + dblChange.ToString("C"));
}

预先声明变量,并将diffTest初始化为false。任务是确保输入的销售税在0到25之间,他们不能输入单词或其他任何东西。我以为我做得对,但当我运行它时,我的消息框上有一个无限循环,我不知道如何正确地摆脱它(输入break只是让我退出,但保留输入)。我已经谷歌到我的心的内容,但还没有找到一个解决方案,但我觉得这是因为我的代码是重用什么在文本框自动(我可能是非常错误的!)。一旦我得到这个,我将不得不"白痴证明"我的其他输入,但我还没有尝试,因为我仍然卡在第一个。我是一个初学编程的学生,所以任何帮助都很感激。

c#无限循环帮助基础编程

这里不需要while语句。改为:

if (dblSalesTax < 0 || dblSalesTax > 25)

因为你有一个while循环一旦你进入循环你就永远不会退出因为你的条件总是为真

我猜你应该把While改成If

private void btnAddItem_Click(object sender, EventArgs e)
{
    //Declare variables
    double dblSalesTax = 0, dblPrice, dblTax, dblSalesPrice;
    string strItem, strTaxAdded;
    int intQuantity;
    bool diffTest = false;
    //Process user input

        //While (!diffTest)
        //{
          diffTest = double.TryParse(txtSalesTax.Text, out dblSalesTax);
        //}   
        // Check if the value gets parsed and is in range, otherwise show error and 
        //exit from this handler
        If (!diffTest || dblSalesTax < 0 || dblSalesTax > 25)  '<--- Change While to If
        {
            MessageBox.Show("Please enter a valid tax.");
            txtSalesTax.Clear();
            diffTest = false;
            return; // Return from here since validation failed
        }
        ... 
        ...
        ...
}

您可以尝试将Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());await用于具有循环的task,如下所示:

Parallel.Invoke(
        () =>
            {
               Console.WriteLine("Begin first task...");
            },  // close first Action
        async () =>
              {
                  Console.WriteLine("Begin second task...");
                  while (true)
                        {
                         // HERE you are the code you need to be executed in infinite loop
                          await Task.Delay(60000);
                         }
              }, //close second Action
        () =>
            {
                Console.WriteLine("Begin third task...");
            } //close third Action
        ); //close parallel.invoke
        Console.WriteLine("Returned from Parallel.Invoke");