Значения C , не считываемые в случае переключения цикла while

#c #switch-statement

#c #switch-инструкция

Вопрос:

Все функции были объявлены общедоступными в моем файле .header это мой код:

 void menu
{
int option = 0;
  //cout menu here//
  //getting user input to enter their option of menu
  cin>>option;
  menuChoice(option);
}

void menuChoice(int option)
{


  int kiv = 0; 
 const int size = 50;
    while(option) //option just an int to get input from a menu
    {
        switch(option)
        {
            case 1: {
                       while(kiv<size)
                        {
                          //codes here to read user inputs then entry increment
                             kiv;
                         }
                        //cout<<kiv<<endl; // doesn't work here too , it displays nothing
                     }break;
             case2:{
                       cout<<kiv<<endl; // displays 0
                    }break;
         }
    }
}
  

я объявил kiv сверху, затем увеличил его в цикле while , однако значение остается в цикле while (опция), поэтому, когда я перехожу к варианту 2, предполагается распечатать увеличенное значение, но оно отображает 0, я двигаюсь в правильном направлении?

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

1. Пожалуйста, напишите полный код с инициализацией параметра и получением пользовательского ввода

2. итак, вы переходите к случаю 2 во втором раунде?

3. @Pavel check редактировать код слишком длинный для всего, поэтому я просто написал его здесь.

4. @Pragun я много раз пытался ввести регистр 1, после этого перейдя к регистру 2, он по-прежнему отображает 0

Ответ №1:

Возможно, это то, что вы ищете

     int kiv = 0;
    const int size = 50;
    void menuChoice(int option);
    void getOption()
    {
        int option = 0;
        cin >> option;
        menuChoice(option);
    }
    void menuChoice(int option)
    {

        switch (option) {
        case 1:
            while (kiv < size) {
                //codes here to read user inputs then entry increment
                  kiv;
            }
            //cout<<kiv<<endl; // doesn't work here too , it displays nothing
            break;
        case 2:
            cout << kiv << endl; // displays 0
            break;
        }
        getOption();
    }
    void menu()
    {
        //cout menu here//
        //getting user input to enter their option of menu
        getOption();

    }
int main(int argc, char **argv)
{
    menu();
    return 0;
}
  

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

1. Но в чем проблема с моим циклом? я знаю, что глобальное объявление может решить проблему, однако значение остается в цикле, я должен быть в состоянии извлечь его, но что пошло не так? и, извините, я забыл упомянуть, что мои функции объявляются общедоступными в моем файле class .header

2. Сначала выберите меню whileloop, оно никогда не выходит из цикла. Поток, вызывающий menuChoice, никогда не возвращается из этой функции из-за этого цикла. amp; он не принимает никаких новых входных данных, этот цикл не требуется.

Ответ №2:

Из вашего примера не совсем ясно, но я предполагаю, что каждый раз, когда вы обрабатываете menuChoice, вы вводите эту функцию, и в результате вы каждый раз повторно инициализируете kiv обратно в 0.

Если это так, вам, вероятно, нужно изменить тип kiv на

 static int kiv = 0;
  

Это приведет к тому, что kiv сохранит свое значение между вызовами.