0

私はC++を初めて使用します。ユーザーに整数値を入力してもらいたい関数を作成しました。私は以下を使用して文字の入力を防ぐ方法を知っています:

    if(!(cin>>a)) 

また

    if (cin.fail())

ここaで、はタイプintです。ユーザーが最初に文字を入力し、次に数字を入力した場合、たとえば:ab12コードは機能しますが、ユーザーが逆に入力した場合、たとえば12ab12が入力値として使用されます。どうすればそれを防ぐことができますか?

4

1 に答える 1

5

これを試して:

#include <sstream>
#include <string>

std::string line;
int n;

if (std::getline(std::cin, line))
{
    std::istringstream iss(line);
    if (iss >> n >> std::ws && iss.get() == EOF)
    {
        // success, n is now a valid int
    }
}

または、おそらくループ内でより便利に:

for (std::string line; std::getline(std::cin, line); )
{
    std::istringstream iss(line);

    if (!(iss >> n >> std::ws && iss.get() == EOF))
    {
        std::cout << "Sorry, did not understand, please try again.";
        continue;
    }

    std::cout << "Thanks. You said: " << n << std::endl;
}
于 2013-03-19T18:24:52.660 に答える