Я скажу вам одну вещь, которая сразу же не так с вашим кодом, не ваша конкретная проблема, но, тем не менее, волосатая.
Я предполагаю, что ваша mainMenu()
функция вызывает эту.В этом случае вы, похоже, заблуждаетесь, что:
if (str == "911") //go back to the main menu
{
system("cls");
mainMenu();
}
вернется в ваше меню.Это будет не сделать это.То, что он будет делать, это снова вызвать код вашего главного меню, и в конечном итоге вы исчерпаете место в стеке.
Я подозреваю, что вам следует делать цикл в mainMenu()
, а приведенный выше код должен простоиспользуйте return;
вместо рекурсивного вызова mainMenu()
.
Это и тот факт, что я думаю, что вы должны сравнивать MessageToAdd
с "911"
вместо str
.
Еще одна вещь, которую я хотел бы сделать, - поместить временный код отладки в:
cout << "DEBUG A\n";
i=0;
while (i < 10)
{
cout << "DEBUG B " << i << "\n";
if (myMessages[i].empty())
{
cout << "DEBUG C\n";
myMessages[i]=MessageToAdd;
break;
}
else
{
i++;
cout << "DEBUG D " << i << "\n";
}
cout << "DEBUG E\n";
}
cout << "DEBUG F\n";
и посмотреть, что будет напечатано.Конечно, вы можете отслеживать выполнение в отладчике, но это потребует от вас выполнения работы самостоятельно.Если вы просто опубликуете вывод (первые 100 строк, если он огромен), то мы, вероятно, легко расскажем вам, что случилось.
На самом деле, я думаю, что ваша проблема - cin.ignore
.Когда я запускаю ваш код, ничего не работает, ни Test
, ни Test Test Test
.Это потому, что он игнорирует первые 1080 символов, которые я пытаюсь ввести.Доказательство можно увидеть, когда вы измените эти операторы на:
cin.ignore(1);
getline (cin,MessageToAdd);
cout << MessageToAdd << "\n";
и вы получите est
вывод при вводе test
.
Извлеките строку ignore
и попробуйте снова,Я не уверен в этом, поскольку вы, похоже, указываете, что Test
работает, но я не вижу в этом правильности.
Итак, вот что вам нужно сделать (как минимум):
- избавиться от
cin.ignore
в целом. - использовать
return
вместо mainMenu()
. - использовать
if (MessageToAdd == "911")
вместо if (str == "911")
. - Дайте нам знать, как это будет происходить.