В зависимости от того, что пользователь выберет, определите выход - PullRequest
0 голосов
/ 09 сентября 2010

Если пользователь вводит A, он работает, затем он вводит B, он работает, и он работает, если они вводят E, он тоже работает, но если они затем вводят A, чтобы запустить поверх, программа закрывается.;

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());
       }

Ответы [ 3 ]

4 голосов
/ 09 сентября 2010

Потому что ваш код зацикливается только на тип ответа. Он повторяется, пока отклик 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 голосов
/ 09 сентября 2010

Это та же ситуация, что и на ваш другой вопрос: Делать циклы и циклы while

Вы захотите использовать оператор 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());
1 голос
/ 09 сентября 2010

Посмотрите, в каком порядке проходит ваша программа: сначала она проверяет As, а затем проверяет Bs, затем Es и затем выходит.

Похоже, вы ничего не делаетеважно с идентификатором продавца, хотя я предполагаю, что вы это сделаете позже.

Вместо трех отдельных циклов вам нужен один большой цикл, который продолжается до тех пор, пока ответом не является Z, а затем использует наборif(...) выписок внутри компании или, возможно, даже switch выписки, чтобы решить, что делать с идентификатором продавца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...