Вы не показали, что v.listOfNames
объявлено как, но это как статический массив, верно? Вместо этого вы должны использовать std::vector<std::string>
.
В любом случае, в вашем коде QT ваш while
цикл выполняется бесконечно, если пользователь вводит непустую строку, так как вы не изменяете v.getNames
так что его length()
может уменьшаться со временем. Вам, вероятно, вообще не нужен цикл while
, если пользователь может вводить только 1 строку за нажатие кнопки.
Кроме того, вы увеличиваете namesEntered
слишком рано и не проверяете, когда namesEntered
превышаетграницы listOfNames
, если это действительно статический массив.
Попробуйте вместо этого нечто большее:
CLI
enteredNames = 0;
...
std::cout << "Enter a name\tor enter nothing to quit" << std::endl << ">>>";
while (getline(std::cin, getNames) && !getNames.empty())
{
listOfNames[enteredNames] = getNames;
++enteredNames;
std::cout << "Enter another name\tor enter nothing to quit" << std::endl << ">>>";
}
QT
void MainWindow ... initialize(){
v.namesEntered = 0;
}
void MainWindow ... buttonClicked(){
v.getNames = ui->nameInputBox->text().toStdString();
if (!v.getNames.empty()) {
if (v.namesEntered >= std::size(v.listOfNames)) {
// the list is full, do something else ...
}
else {
v.listOfNames[v.namesEntered] = v.getNames;
v.namesEntered++;
}
}
}