2012-01-18 2 views
0

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(); 
+1

당신은 DO-while 루프 내부에 nAreas 변수를 증가해야합니다. like 'nAreas ++' –

+3

숫자는 1보다 낮을 수는 없으며 동시에 5보다 높을 수 없습니다. –

답변

0
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 
+0

감사합니다. !!!!!!! :) – user1156596

0

두 가지 문제 :

  1. 당신이 루프 내에서 새로운 입력을 요구하지 입니다
  2. 당신은 당신의 루프에 대한 잘못된 종료 조건이 - 불법를 숫자가 이 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 
+0

정말 고마워요! – user1156596