Принять только целое число для ввода

 # sed script to change "foo" to "bar" only on the first occurrence
 1{x;s/^/first/;x;}
 1,/foo/{x;/first/s///;x;s/foo/bar/;}
 #---end of script---

или, если хотите: Примечание редактора: работает только с GNU sed.

sed '0,/RE/s//to_that/' file 

Источник

-1
задан Remy Lebeau 2 March 2019 в 02:42
поделиться

1 ответ

operator>> не гарантируется вывод значащего целочисленного значения в случае сбоя, но вы не проверяете сбой перед оценкой __userChoice, и то, как ваши if структурированы, проверка else (!cin) никогда не будет быть достигнутым. Но даже если operator>> успешно, вы не проверяете, вводил ли пользователь больше, чем просто целое число.

Чтобы сделать то, что вы просите, вы должны прочитать из std::cin в std::string сначала используя std::getline() , а затем использовать std::istringstream или [1115 ] std:stoi() (или эквивалентный) для преобразования string в int с проверкой ошибок.

Например:

bool strToInt(const std::string &s, int &value)
{
    std::istringstream iss(s);
    return (iss >> value) && iss.eof();

    // Or:

    std::size_t pos;
    try {
        value = std::stoi(input, &pos);
    }
    catch (const std::exception &) {
        return false;
    }
    return (pos == input.size());
}

...

std::string input;
int userChoice;

std::cout << "Please select: ";
std::getline(std::cin, input);

if (strToInt(input, userChoice))
{
    if (userChoice > 0 && userChoice < 5)
    {
        std::cout << "You selected menu item " << userChoice <<". Processing... Done!\n";
    }
    else if (userChoice == 5)
    {
        Finalization(); //call exit
    }
    else
    {
        std::cout << "Please select a number from 1 to 5.\n";
    }
}
else
{
    std::cout << "Invalid input, please input an integer number.\n";
}
0
ответ дан Remy Lebeau 2 March 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: