Do-while зависает в Qt

113
11 декабря 2020, 08:00

Помогите пожалуйста с одним вопросом. Пишу программу в Qt с интерфейсом. При нажатии кнопки должны выполняться определенные действия, на некоторые значения стоит проверка и QInputDialog для изменения значения во время выполнения программы. Написали конструкцию do-while для проверки, при некорректном вводе значения программа работает исправно снова предлагая ввести корректное значение, однако когда ввожу требуемое значение, то программа просто зависает и перестает работать. Не пойму почему, при использовании точно такой же конструкции, но в консольном приложении все работает исправно. Пожалуйста подскажите как решить эту проблему.

void MainWindow::on_pushButton_clicked()
{
QLocale::setDefault(QLocale::C);
....
bool bv_1 = true;
bool ok;
do
{
    if (ver_1 < 0 || ver_1 > 1)
    {
        double test = QInputDialog::getDouble(this, "Ошибка ввода!", "Недопустимая вероятность смерти. Введите число от 0 до 1!", ver_1, -2147483647, 2147483647, 3, &ok );
        if (ok)
        {
            ver_1 = test;
        }
        else {
            bv_1 = false;
            break;
        }
    }
}while(bv_1);  ....}
Answer 1

Очевидно, что единственная возможность выйти из цикла - это попадание в ветку if(ok)… else. Так что цикл надо прерывать при успешной проверке числа:

while((ver_1 < 0) or (1 < ver_1))
{
    double test = QInputDialog::getDouble(this, "Ошибка ввода!", "Недопустимая вероятность смерти. Введите число от 0 до 1!", ver_1, -2147483647, 2147483647, 3, &ok );
    if(ok)
    {
        ver_1 = test;
    }
}
READ ALSO
Площадь невыпуклого многоугольника

Площадь невыпуклого многоугольника

Задача: Многоугольник (необязательно выпуклый) задан на плоскости перечислением координат вершин в порядке обхода его границыОпределить...

122
Qt5: lineEdit Не учитывается значение с запятой

Qt5: lineEdit Не учитывается значение с запятой

Есть некоторая форма на которой есть lineEdit

104
Запись и чтение объекта из бинарного файла

Запись и чтение объекта из бинарного файла

Неправильно записывает и читает из файлаЗаписывает age = 5и Name = "Масло", а выводит age=0 и Name = ""

113
Иероглифы вместо русского текста в коде

Иероглифы вместо русского текста в коде

Переустановил Windows, поставив английскую версию (United States)После этого все файлы кода в Visual Studio, которые были написаны на русской версии, искажены,...

87