2010-09-09 47 views
0

如果用户输入A,它将起作用,然后它们输入B它会起作用,如果它们输入E,它也会起作用。它也可以工作,但如果它们然后输入A,则重新开始关闭程序。取决于用户选择什么来确定输出

const double COMMRATE = 0.10;

const double COMMRATE = 0.10; 

string inputstring; 

char response; 
Console.Write("Do you want to Calculate Sales A or B or E..."); 
inputstring = Console.ReadLine(); 
response = Convert.ToChar(inputstring); 

    while (response == 'A') 
    { 
    Console.WriteLine("Enter amount of sales"); 
    string salesStr = Console.ReadLine(); 
    Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
    Console.WriteLine("Enter sales member to continue or Z to exit"); 
    response = Convert.ToChar(Console.ReadLine()); 
    } 
    while (response == 'B') 
    { 
     Console.WriteLine("Enter amount of sales"); 
     string salesStr = Console.ReadLine(); 
     Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
     Console.WriteLine("Enter sales member to continue or Z to exit"); 
     response = Convert.ToChar(Console.ReadLine()); 
    } 
    while (response == 'E') 
    { 
     Console.WriteLine("Enter amount of sales"); 
    string salesStr = Console.ReadLine(); 
    Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
    Console.WriteLine("Enter sales member to continue or Z to exit"); 
    response = Convert.ToChar(Console.ReadLine()); 
     } 

回答

4

因为您的代码只响应每个响应类型。 它迭代,而响应是A,然后在B,那么当E.这意味着它可以在该序列

只经营也许你应该看看喜欢的事:

do 
{ 
    Console.WriteLine("EnterNextCommand"); 
    inputstring = Console.ReadLine(); 
    response = Convert.ToChar(inputstring); 
    switch (response) 
    { 
     case 'A': 
     case 'a': 
     //case A logic 
     break; 
     case 'B': 
     case 'b': 
     //case B logic 
     break; 
     //etc. 
     default: 
     //they enter something you're not handling 
     break; 
    } 

} 
while (inputstring != "Z") 
3

这是同样的情况你的另一个问题:Do loops and while loops

你要使用if语句或switch语句来分析用户的输入:

if (response == 'A') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    string salesStr = Console.ReadLine(); 
    Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
    Console.WriteLine("Enter sales member to continue or Z to exit"); 
    response = Convert.ToChar(Console.ReadLine()); 
} 

if (response == 'B') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    string salesStr = Console.ReadLine(); 
    Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
    Console.WriteLine("Enter sales member to continue or Z to exit"); 
    response = Convert.ToChar(Console.ReadLine()); 
} 

if (response == 'E') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    string salesStr = Console.ReadLine(); 
    Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
    Console.WriteLine("Enter sales member to continue or Z to exit"); 
    response = Convert.ToChar(Console.ReadLine()); 
} 

而且,你声明字符串salesStr在你的while(或在我的例子中,if)的范围内。您将无法在其他地方访问它。由于你在每个块中重复相同的逻辑,但是具有不同的值,所以我倾向于将重复代码移到其外面,并且只将它放在那里。这样,你只需要在将来改变一个地方,如果需求变更:

string salesStr; 

if (response == 'A') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    salesStr = Console.ReadLine(); 
} 

if (response == 'B') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    salesStr = Console.ReadLine(); 
} 

if (response == 'E') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    salesStr = Console.ReadLine(); 
} 

Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
Console.WriteLine("Enter sales member to continue or Z to exit"); 
response = Convert.ToChar(Console.ReadLine()); 

由于这些if报表正在做同样的事情,你可以结合他们太多:

string salesStr; 

if (response == 'A' || response == 'B' || response == 'E') 
{ 
    Console.WriteLine("Enter amount of sales"); 
    salesStr = Console.ReadLine(); 
} 

Console.WriteLine(Double.Parse(salesStr) * COMMRATE); 
Console.WriteLine("Enter sales member to continue or Z to exit"); 
response = Convert.ToChar(Console.ReadLine()); 
+0

我有同样的问题。我可以从A开始,然后转到B然后E,但是当我尝试再次击中A时,程序关闭。 – user770022 2010-09-09 04:42:52

+0

@ randywhite30 - 检查Val上面的答案,它包含循环以保持程序运行,直到您按下Z. – 2010-09-09 04:48:50

+0

+1为随附的课程计划。 @randy你没有循环你的程序,你正在使用if语句这样的循环。 – Val 2010-09-09 04:50:04

1

看按照程序流入的顺序:首先,它检查As,然后检查Bs,然后Es,然后退出。

看起来你对销售人员的ID还没有做任何重要的事情,尽管我认为你会迟一些。

而不是三个单独的循环,只要响应不是Z,就需要一个大循环,然后在内部使用一组if(...)语句,或者甚至使用switch语句来决定如何处理销售员的ID。

相关问题