C# 对不正确的输入使用正确的循环

C# 对不正确的输入使用正确的循环,c#,C#,我尝试输入一个循环,以阻止区域数低于0或高于5,我尝试输入do while循环,但即使输入了不正确的输入,它仍会执行下一个代码块。我已经用循环对该部分进行了注释。非常感谢您的帮助,谢谢 const int MaxItems = 5; // max size of array needed double[] itemCosts = new double[MaxItems]; int jobType; // valid values are 1=normal, 2=waterproofing, 3

我尝试输入一个循环,以阻止区域数低于0或高于5,我尝试输入do while循环,但即使输入了不正确的输入,它仍会执行下一个代码块。我已经用循环对该部分进行了注释。非常感谢您的帮助,谢谢

const int MaxItems = 5; // max size of array needed 
double[] itemCosts = new double[MaxItems];
int jobType; // valid values are 1=normal, 2=waterproofing, 3=skim 
int nAreas;
int i;
string customer;
double totalCost = 0.0;
double averageCost;
const double discountPrice = 800; // price at which discount available 
const double discountRate = 0.1; // discount rate 
const double setupCostPerArea = 30.00;

// cost of moving furniture, carpets etc.     

double discount, discountedTotal; // discount amount and discounted total 
double width, height; // width and height of plaster area 
double[] basePrices = { 0, 35.0, 30.0, 20.0 };  // added 0 as index placeholder, so 35 can be selected using 1, and so forth.
// prices per square metre for standard, plasterboard and skim, and skim only 

Console.Write("enter name of customer: ");
customer = Console.ReadLine();

Console.Write("enter number of plaster areas to quote for: ");
nAreas = Convert.ToInt32(Console.ReadLine());

do
{
    Console.WriteLine("Please Enter numbers of rooms between 1 and 5 only!!!!");
} while (nAreas < 1 && nAreas > 5); // loop

for (i = 0; i < nAreas; i++)
{
    Console.WriteLine("Data entry for area {0}", i + 1);

    Console.Write("enter 1 (standard), 2 (plasterboard and skim) or 3 (skim only): ");
    jobType = Convert.ToInt32(Console.ReadLine());

    Console.Write("enter width of area {0} in metres: ", i + 1);
    width = Convert.ToDouble(Console.ReadLine());

    Console.Write("enter height of area {0} in metres: ", i + 1);
    height = Convert.ToDouble(Console.ReadLine());

    // add base area cost to price based on area and type of plaster 
    itemCosts[i] = setupCostPerArea + (basePrices[jobType] * (width * height));
    totalCost += itemCosts[i];
}

averageCost = totalCost / nAreas;

// main report heading 
Console.WriteLine("\n");
Console.WriteLine("Plasterers R US Job Costing Report");
Console.WriteLine("===================================");
Console.WriteLine("\nName of customer: {0}\n", customer);
Console.WriteLine("No. of plaster areas: {0}", nAreas);
Console.WriteLine("Average Cost per area £{0:0.00}", averageCost);
// output subheadings 
Console.WriteLine("Area\tCost\tDifference From Average");
for (i = 0; i < nAreas; i++)
{
    Console.Write("{0}\t", i + 1);
    Console.Write("£{0:0.00}\t", itemCosts[i]);
    Console.WriteLine("£{0:0.00}", itemCosts[i] - averageCost);
}
Console.WriteLine("Total Cost £{0:0.00}", totalCost);
if (totalCost > discountPrice)
{
    discount = totalCost * discountRate;
    discountedTotal = totalCost - discount;
    Console.WriteLine(" - Discount of £{0:0.00}", discount);
    Console.WriteLine(" Discounted Total £{0:0.00}", discountedTotal);
}

Console.WriteLine("press enter to continue");
Console.ReadLine();
const int MaxItems=5;//所需阵列的最大大小
double[]项目成本=新的double[MaxItems];
int jobType;//有效值为1=正常,2=防水,3=脱脂
国际纳里亚;
int i;
串客户;
双重总成本=0.0;
平均成本加倍;
常数双折扣价格=800;//有折扣的价格
常数双偏心率=0.1;//贴现率
const-double-setupCostPerArea=30.00;
//移动家具、地毯等的费用。
双重折扣,折扣总额;//折扣金额和折扣总额
双宽度、双高度;//抹灰区域的宽度和高度
双[]基准价格={0,35.0,30.0,20.0};//添加了0作为索引占位符,因此可以使用1选择35,以此类推。
//标准板、石膏板和撇渣板以及仅撇渣板的每平方米价格
控制台。写入(“输入客户名称:”);
customer=Console.ReadLine();
控制台。写下(“输入要引用的石膏区域数量:”);
nAreas=Convert.ToInt32(Console.ReadLine());
做
{
Console.WriteLine(“请只输入1到5之间的房间数量!!!!”);
}而(nAreas<1&&nAreas>5);//环
对于(i=0;i折扣价格)
{
折扣=总成本*折扣;
折扣总额=总成本-折扣;
Console.WriteLine(“折扣为{0:0.00}”,折扣);
Console.WriteLine(“折扣总额{0:0.00}”,折扣总额);
}
Console.WriteLine(“按enter键继续”);
Console.ReadLine();
do
{
控制台。写下(“输入要引用的石膏区域数量:”);
nAreas=Convert.ToInt32(Console.ReadLine());
如果(nAreas<1 | | nAreas>5)
Console.WriteLine(“请只输入1到5之间的房间数量!!!!”);
}而(nAreas<1 | | nAreas>5);//环
两个问题:

  • 您没有在循环中要求新的输入
  • 循环的退出条件错误-非法are数小于1或大于5
  • 针对以下两个方面进行调整:

    do
    {
       Console.Write("enter number of plaster areas to quote for: ");
       nAreas = Convert.ToInt32(Console.ReadLine());
    
       if(nAreas < 1 || nAreas > 5)
          Console.WriteLine("Please Enter numbers of rooms between 1 and 5 only!!!!");
    
    } while (nAreas < 1 || nAreas > 5); // loop
    
    do
    {
    控制台。写下(“输入要引用的石膏区域数量:”);
    nAreas=Convert.ToInt32(Console.ReadLine());
    如果(nAreas<1 | | nAreas>5)
    Console.WriteLine(“请只输入1到5之间的房间数量!!!!”);
    }而(nAreas<1 | | nAreas>5);//环
    
    您需要在do while循环中增加nAreas变量。如
    nAreas++
    Number不能同时小于1和大于5
    do
    {
       Console.Write("enter number of plaster areas to quote for: ");
       nAreas = Convert.ToInt32(Console.ReadLine());
    
       if(nAreas < 1 || nAreas > 5)
          Console.WriteLine("Please Enter numbers of rooms between 1 and 5 only!!!!");
    
    } while (nAreas < 1 || nAreas > 5); // loop