Некорректный вывод, отображаемый при реализации программы на C

#c

#c

Вопрос:

В этом коде я в основном создаю программу для оздоровительного клуба. Пользователь вводит желаемое членство и месяцы, а затем выводит общую сумму сборов. Программа отлично работает для вариантов 2 и 4, однако для 1 она выдает два вывода, а для 3 вообще ни одного. Я предполагаю, что в моем коде есть небольшая ошибка, которую я действительно не могу найти. Программа работает нормально для 2, но tit вычисляет два значения для 1 и не отображает ни одного для 3.

 #include <iostream>
using namespace std;

void menu ()
{
    cout << "nttHealth Club Membership Menunn";
    cout << "1. Standard Adult Membershipn";
    cout << "2. Child Membershipn";
    cout << "3. Senior Citizen Membershipn";
    cout << "4. Quit the Programnn";
    cout << "Enter your choice: ";

}
void fees(int member,int months)
{
    cout<<"The fees is Rs.";
    cout<<(member*months);
}

int main()
{

    int  months, choice;
    int adult=40;
    int child=20;
    int senior=50;
     do{menu();

    {

        cin>>choice;
        if (choice>=4)
        {
            cout<<"You have quit your membershipn";
            return 0;
        }
        cout<<"Please enter the number of months you want"<<endl;
        cin>>months;


        switch (choice)
        {
            case 0:
            choice==1;
            fees(adult,months);
        }
            case 1:
                {
                    choice==2;
                    fees(child,months);
                    }
        case 2:
            {
                choice==3;
                    fees(senior,months);

            }



    }
    }




}
    while((choice>=1) || (choice<4));
    return 0;
}
  

Комментарии:

1. 1) Исправьте отступы и общее форматирование кода. 2) Просмотрите инструкцию break .

2. choice==1; ничего не делает.

Ответ №1:

Я исправил некоторые части вашей программы. Вот мой.

Моя программа

 #include <iostream>
using namespace std;

void fees(int member, int months); //function prototype to calculate fees for members of differing age groups
void menu(); //function prototype to display options

void menu()
{
    cout << "nttHealth Club Membership Menunn";
    cout << "1. Standard Adult Membershipn";
    cout << "2. Child Membershipn";
    cout << "3. Senior Citizen Membershipn";
    cout << "4. Quit the Programnn";
    cout << "Enter your choice: ";

}

void fees(int member,int months)
{
    cout<<"The fees is Rs.";
    cout<<(member*months);
}

int main()
{
    
    int months, choice;
    int senior=50;
    int adult=40;
    int child=20;
    
    menu(); //invoke menu method
    
    cin>>choice;
    if (choice == 4)
        {
            cout<<"You have quit your membershipn";
            return 0;
        }
        
        cout<<"Please enter the number of months you want"<<endl;
        cin>>months;


        switch (choice)
        {
            case 1:
            fees(adult,months);
            break;
        
            case 2:
            fees(child,months);
            break;
                    
            case 3:
            fees(senior,months);
            break;
            
            default:
            return 0; //exit program if choice is out of range
        }    
    return 0;
}
  

Вывод для выбора 1

 Enter your choice: 1
Please enter the number of months you want
3
The fees is Rs.120
  

Вывод для выбора 3

 Enter your choice: 3
Please enter the number of months you want
5
The fees is Rs.250
  

Вывод для выбора 2

 Enter your choice: 2
Please enter the number of months you want
6
The fees is Rs.120
  

Как вы можете видеть, я попытался сделать отступ в коде, чтобы убедиться, что он аккуратный. Как и то, что V.p. сказал в предыдущем комментарии, поскольку вы объявили выбор в switch statement , нет необходимости включать choice==1 or etc . Вы будете указывать это только в том if-else parentheses случае, если хотите реализовать условия. В конце концов, все ваши варианты будут работать. Самое главное, пожалуйста, внимательно прочитайте документацию по C и не делайте этого ради этого, иначе у вас будут проблемы. Надеюсь, это ответ на ваш вопрос 🙂

Комментарии:

1. Две вещи. 1) Я хотел, чтобы программа была в цикле, чтобы после завершения она автоматически отображала меню, и программа запускалась снова. 2) Не могли бы вы направить меня к аутентичным ресурсам.

2. @Kh.Murad не имеет смысла запускать все это снова, даже если выбор правильный. Как будто это не имеет никакого смысла с логической точки зрения. Вам нужно выполнять цикл только тогда, когда в этом экземпляре необходимо выполнить хотя бы 1 набор инструкций

3. А также тот факт, что это простая программа, это можно сделать во время цикла для цикла и т. Д., Даже Исключение try-catch тоже будет работать.

Ответ №2:

Вам нужны инструкции break. Вероятно, поэтому вы получаете два вывода для выбора 1.

У вас нет инструкции case для выбора 3. Вот почему вы не получаете вывода для 3.

Почему вы реализуете регистр переключения для 0? Кажется ненужным.

Кстати, все ваши строки, подобные choice==1 , на самом деле ничего не делают в вашем коде, и вам это не нужно. Избавьтесь от них.

Наконец, исправьте отступ.