0

ユーザーに名前の入力を求めるときに、ユーザーが整数を入力するのを止めたいと思います。整数と文字でこれを達成しました。コードを文字列に適応させるのを手伝ってくれる人はいますか?

int getNum()
{
    int num;
    std::cout << "\nWhat is your age? ";
    while (!(std::cin >> num))
    {
        // reset the status of the stream
        std::cin.clear();
        // ignore remaining characters in the stream
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "Enter an *integer*: ";
    }
    std::cout << "You entered: " << num << std::endl;
    return num;
}

char getChar(string q)
{
    char input;
    do
    {
        cout << q.c_str() << endl;
        cin >> input;
    }
    while(!isalpha(input));
    return input;
}
4

2 に答える 2

1
string q = "This is a test123";

for(string::iterator i = q.begin(); i != q.end(); i++)
{
    if((*i < 'A' || *i > 'z') && (*i != ' '))
    {
        return false;
    }
}

スペースやその他の文字を許可する場合は、オプションもあります。

編集:単一の文字をチェックするために更新:

char c;
bool finished = false;
printf("Please enter your sex, M/F?\n");
while(!finished)
{
    cin >> c;
    if(!(c == 'm' || c == 'M' || c== 'f' || c=='F'))
    {
        printf("Please try again...\n");
    }
    else
    {
        finished = true;
    }
}

c は、Enter が押されたときの 1 文字ずつの入力のみであり、その前に改行は行われないことに注意してください。

于 2012-10-18T14:34:51.917 に答える
1

std:string を使用する予定がある場合は、これを使用して、入力された文字列に数字が含まれているかどうかを確認できます。

if (std::string::npos != s.find_first_of("0123456789"))
{
  std::cout << "digit(s)found!" << std::endl;
}
于 2012-10-18T14:26:01.563 に答える