Как в c++ сделать проверку на число и чтоб например если несколько точек в числе или минус в середине была ошибка и возвращало обратно к вводу?

Для реализации проверки на число в языке C++ можно использовать цикл, который будет проверять каждый символ в введенной строке. Если символ не является допустимым для числа (например, точка или минус в середине числа), то программа должна выдать ошибку и перейти обратно к вводу.

Вот пример кода, который выполняет такую проверку:

#include <iostream>
#include <string>

bool isValidNumber(const std::string& input) {
    bool hasDecimalPoint = false;
    bool hasMinusSign = false;

    for (char c : input) {
        if (c == '.') {
            if (hasDecimalPoint) {
                return false;  // Обнаружено более одной точки
            }
            hasDecimalPoint = true;
        } else if (c == '-') {
            if (hasMinusSign) {
                return false;  // Обнаружено более одного минуса
            }
            if (!input.empty() && input[0] != '-') {
                return false;  // Минус не находится в начале строки
            }
            hasMinusSign = true;
        } else if (!std::isdigit(c)) {
            return false;  // Найден недопустимый символ
        }
    }

    // Если программа дошла до этой точки, значит введенная строка является корректным числом
    return true;
}

int main() {
    std::string input;

    do {
        std::cout << "Введите число: ";
        std::cin >> input;

        if (!isValidNumber(input)) {
            std::cout << "Ошибка ввода. Пожалуйста, введите число еще раз." << std::endl;
        }
    } while (!isValidNumber(input));

    std::cout << "Вы ввели корректное число: " << input << std::endl;

    return 0;
}

В этом примере функция isValidNumber() выполняет проверку на число в строке. Она использует флаги hasDecimalPoint и hasMinusSign, чтобы отслеживать, были ли обнаружены точка или минус во время проверки. Если найдено более одной точки или минус не находится в начале строки, функция возвращает false. Если символ не является десятичной цифрой или точкой или минусом, функция также возвращает false. Если проверка проходит успешно, функция возвращает true.

В функции main() используется цикл do-while, чтобы проверить валидность введенной строки. Если введенная строка не является корректным числом, выводится сообщение об ошибке и программа возвращает обратно к вводу. Если введенная строка является корректным числом, выводится сообщение с этим числом.

Такой подход к проверке чисел обеспечивает точность и гибкость в обработке различных ситуаций ошибок при вводе данных.