Мне нужно создать меню, содержащее имена элементов, я могу сделать это с помощью цикла for, который заканчивается до тех пор, пока не будет достигнуто максимальное значение, но как мне это сделать с помощью цикла while, который будет продолжать спрашивать до тех пор, пока не будет достигнуто максимальное значение или я не ввожу -1
Я пробовал с циклом for, и это сработало, но я должен использовать цикл while, который может остановиться, когда я скажу ему остановиться.
#include <iostream>
using namespace std;
void read_in_menu(char menu_list[][50], float price_list[], int& num_menu_items,
int MAX_MENU_ITEMS);
int main()
{
const int MAX_MENU_ITEMS = 5;
char menu_list[MAX_MENU_ITEMS][50];
float price_list[MAX_MENU_ITEMS];
int num_menu_items;
read_in_menu(menu_list, price_list, num_menu_item, MAX_MENU_ITEMS);
}
void read_in_menu(char menu_list[][50], float price_list[], int& num_menu_items,
int MAX_MENU_ITEMS)
{
for (int i = 0; i < MAX_MENU_ITEMS; i++)
{
cout << "Enter Names: ";
cin.getline(menu_list[i], 20);
}
}
Я хочу использовать цикл while, который будет продолжаться до тех пор, пока я не введу -1 или не достигну максимума. Я хочу остановить цикл while, когда захочу, вместо цикла for, где я должен достичь максимума.
Всякий раз, когда вы хотите выйти из цикла, вы можете использовать ключевое слово break
.
for(int i = 0; i < MAX; i++){
if (i > 10){
break;
}
doWork();
}
Вы можете преобразовать петлю for
в другие петли. Например:
Для
for(int i = 0; i < 10; i++)
DoSomething();
Пока
int i = 0;
while(i < 10){
DoSomething();
i++;
}
делать пока
int i = 0;
do{
DoSomething();
i++;
}
while(i < 10);
Для управления циклами используйте ключевые слова continue
и break
. Ключевое слово continue
пропустит текущую итерацию цикла, а break
выйдет из цикла. Обычно они обусловлены утверждением if
.
Если я правильно понимаю, должно работать что-то вроде этого:
int i = 0;
string input = "";
while(i < MAX_MENU_ITEMS || input == "-1") {
cout << "Enter Names: ";
cin.getline(input, 20);
if (input != "-1") { //to avoid setting menu_list[i] = "-1"
menu_list[i] = input;
}
MAX_MENU_ITEMS++;
}
или используя перерыв:
int i = 0;
string input = "";
while(i < MAX_MENU_ITEMS) {
cout << "Enter Names: ";
cin.getline(input, 20);
if (input == "-1") {
break;
}
menu_list[i] = input;
MAX_MENU_ITEMS++;
}
Привет спасибо! Я смог понять это с помощью указателя, но я также сохранял -1 как одну из строк, ваша решает эту проблему!
Я рекомендую небольшую очистку: cin.getline(input, 20);
не будет компилироваться. Эта конкретная форма getline
не примет std::string
. menu_list[i] = input;
тоже не получится. Вы не можете присвоить std::string
массиву char
. Либо используйте std::getline
и указывайте std::string
везде (значительно лучший вариант), либо страдайте от того, что все является массивом char
(Superyuck).
Я смог получить его с помощью указателя, лол.
void read_in_menu(char menu_list[5][20], float price_list[], int &num_menu_items, int MAX_MENU_ITEMS){
int i = 0;
char *p = "-1";
while(i<MAX_MENU_ITEMS){
cout << "Enter Name" << endl;
cin.getline(menu_list[i],20);
if (strcmp(menu_list[i], p)){
i++;
}else{
break;
}
}
}
Вы также можете использовать
break
в цикле while.