#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 сохранит свое значение между вызовами.