0
votes

Terminer une boucle tandis que continuer à demander une entrée de chaîne jusqu'à ce que j'entre -1

Je dois créer un menu qui contient des noms d'éléments, je peux le faire avec une boucle pour la boucle qui se termine jusqu'à ce que le maximum ait été atteint, mais comment puis-je le faire avec une boucle de travail qui continuera à demander jusqu'à ce que le max soit atteint Ou j'entre -1

J'ai essayé avec A pour une boucle et cela a fonctionné, mais je dois utiliser une boucle tandis que vous pouvez arrêter quand je le dis de s'arrêter. P>

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


0 commentaires

4 Réponses :


0
votes

Chaque fois que vous souhaitez quitter une boucle, vous pouvez utiliser le mot-clé break code>.

for(int i = 0; i < MAX; i++){
    if(i > 10){
        break;
    }
    doWork();
}


1 commentaires

Vous pouvez également utiliser break dans une boucle tandis que.



0
votes

Vous pouvez transformer pour en boucle sur d'autres boucles. Par exemple:

pour xxx

tandis que xxx < p> do-tandis-tout xxx

pour contrôler les boucles utilisez Continuer et break Mots-clés . Mot-clé Continuer Ignorera l'itération actuelle de la boucle et BREAK quittera la boucle. Celles-ci sont généralement conditionnées par si instruction.


0 commentaires

0
votes

Si je comprends bien, quelque chose comme ça devrait fonctionner:

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++;
}


2 commentaires

Bonjour merci! J'ai pu comprendre avec un pointeur, mais je stockais -1 comme l'une des cordes également, le vôtre a résolu ce problème!


Je recommande un peu de nettoyage rapide: cin.getline (entrée, 20); ne compilera pas. Ce formulaire particulier de getline n'accepte pas un STD :: String . Menu_List [i] = Entrée; ne fonctionnera pas aussi. Vous ne pouvez pas affecter un std :: chaîne à un tableau tableau . Utilisez std :: getline et spécifier std :: string tout au long de l'ensemble (option très supérieure) ou souffre de tout étant un tableau (Superyuck ).



0
votes

J'ai pu l'obtenir avec un pointeur LOL.

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


0 commentaires