Получение бесконечного l oop вместо значения - PullRequest
2 голосов
/ 04 апреля 2020

Это проблема ниже.

Я получаю бесконечное l oop вместо типа int в данных do-while l oop

#include <iostream>
#include <typeinfo>
int main()

{
    int in; // variable in;

    do //loop for check if variable get valid data
    {

        std::cout << "enter : ";

        std::cin >> in;

        if (typeid(in) == typeid(int()))
            break;
        else
            std::cout << "invalid input !! " << std::endl;
    } while (true);
}

Ответы [ 3 ]

4 голосов
/ 04 апреля 2020

Хотя вы используете RTTI, тип in фиксируется во время компиляции. Кроме того, здесь вы не можете напрямую сравнить typeid переменной int и типа функции. Они не будут такими же. Так что такой дизайн - ерунда. Чтобы проверить, соответствуют ли входные требования целочисленного ввода. В основном у вас есть два способа:

  1. Проверить, установлено ли failbit из cin.
  2. вместо этого прочитать string и проверить, является ли каждый символ в строке git.
1 голос
/ 04 апреля 2020

Условие

if (typeid(in) == typeid(int()))

будет оценено как ложное.

Для того, чтобы оно стало истинным, вам потребуется

if (typeid(in) == typeid(int))

Выполнение пример

Но, как уже говорилось, если вы хотите проверить правильность ввода, это не путь к go.

1 голос
/ 04 апреля 2020

typeid(in) == typeid(int()) эквивалентно typeid(int) == typeid(int()), поскольку in является int.

int() является сигнатурой функции: не принимает параметров и возвращает int.

Отличается от типа int.

Способ проверки правильности ввода - проверка состояния std::cin.

...