Как добавить строку в вектор в меню регистра переключателей в Stack Overflow

Моя задача состоит в том, чтобы создать вектор строк, добавить к нему строки и удалить из него строки. У меня проблемы с добавлением строк. Я также настроил их так, чтобы регистр коммутатора давал возможность добавлять очередь в случае 1.

//gaming Queue

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
int choice;
string input;
bool menu = true;
vector<string> favGames;
while (menu){
cout <<"Welcome to the favorite game queue please add your favorite games:\n";
cout <<"1-Add a favorite game.\n";
cout <<"2-List of your favorite games.\n";
cout <<"3-Remove a game.\n";
cin  >> choice;
switch (choice)
{
case 1:
cout << "Please add a favorite game to the queue: \n";
string input;
cin >> input;
favGames.push_back(input);// Here is my problem it just jumps to case 2 and shows an error
break;
case 2:
cout << "Here is a list of your favorite games.\n";
break;

default:
cout << "You made an illegal choice.\n";
}
}
return 0;
}

-3

Решение

При компиляции вашего кода на https://www.onlinegdb.com/online_c++_compiler, это показывает мне эти ошибки:

main.cpp:34:18: error: jump to case label [-fpermissive]
case 2:
^
main.cpp:30:24: note:   crosses initialization of 'std::string input'
string input;

как вы можете видеть, компилятор говорит вам, что вы пропускаете инициализацию string input, В то же время вы декларируете input второй раз.
Удаляя input Внутри корпуса коммутатора программа компилируется и работает как задумано.

РЕДАКТИРОВАТЬ:

Вы не можете ввести более одного слова, используя cin, потому что cin Извлечение всегда рассматривает пробелы (пробелы, табуляции, новую строку …) как завершение извлекаемого значения.

Так что вы должны использовать getline, То же самое для получения choice,

вот полный код:

#include "stdafx.h"#include <vector>
#include <string>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
int choice;
string input;
bool menu = true;
vector<string> favGames;
while (menu) {
cout << "Welcome to the favorite game queue please add your favorite games:\n";
cout << "1-Add a favorite game.\n";
cout << "2-List of your favorite games.\n";
cout << "3-Remove a game.\n";

string choiceStr;
getline(cin, choiceStr);
stringstream(choiceStr) >> choice;

switch (choice)
{
case 1:
cout << "Please add a favorite game to the queue: \n";
getline(cin, input);
favGames.push_back(input);
break;
case 2:
cout << "Here is a list of your favorite games.\n";
break;
case 3:
cout << "No longer like a game which game should we remove?\n";
break;

default:
cout << "You made an illegal choice.\n";
}
}
return 0;
}

Причина, по которой он входит в бесконечный цикл:

cin >> input может работать только при вводе только одного слова. Если вы введете несколько слов, cin >> input поймает первый, то cin >> choice поймать следующий. Если вход поймать cin >> choice это не int, cin потерпит неудачу, что делает вас бесконечным циклом в этом случае.
Здесь объясняется http://www.cplusplus.com/doc/tutorial/basic_io/.

1

Другие решения

switch заявления немного странные, потому что вы не можете объявить переменные внутри case пункты, если вы не создаете область для них, используя {} блок.

   switch (choice)
{
case 1:
{ // start a scope
cout << "Please add a favorite game to the queue: \n";
string input;
cin >> input;
favGames.push_back(input);// Here is my problem it just jumps to case 2 and shows an error
break;
} // end the scope

Однако в вашем случае вы уже определили std::string вне switchВы собирались использовать это? Тогда вы можете просто удалить один внутри case пункт.

2

По вопросам рекламы [email protected]