仅接受字母/字母以输入变量,如果不是字母,请重复出现

Accept only Alphabet/Letters for input of a variable, reprompt if not letters

本文关键字:如果不 变量 输入      更新时间:2023-10-16

我已经陷入困境了两天。我在Google上搜索了第20页,但无法弄清楚。

我只需要接受townName上输入的字母字母。

我已经尝试了各种循环(我可以想到或找到(。另外,我已经读到isalpha()仅适用于字符。但是,我已经搜索并实施了将字符串从输入转换为字符的方法,我只是没有到达任何地方。

这是我的最后一次尝试:

// Input, validate, and set string name of town 
cout << "Enter name of town: "; 
getline(cin, townName); 
cin >> townName; cin.ignore();
while (townName != isalpha()) {
    cout << "Enter the town name - alphabet only.";
    cin >> townName; }

我知道这不是isalpha的适当使用。我还尝试了isalpha(townName),使用Bools,但是如果它包含Alpha/White Space以外的任何内容,并且是否仅是Alpha,则需要返回提示。

您在正确的轨道上。您需要使用isalpha检查字符串的每个字符。您甚至可能想允许空间,即"纽约"等?我建议编写自己的方法,以对整个输入字符串进行循环进行操作。将整个内容放在一段时间内,您应该全力以赴做自己想做的事。

#include <iostream>
#include <string>
#include <cctype>
// check for only alphabetical letters in string (or spaces)
bool lettersOrSpaces(const std::string& str)
{
    for (size_t i = 0; i < str.size(); i++)
    {
        // make sure each character is A-Z or a space
        if (! std::isalpha(str[i]) && ! std::isspace(str[i]))
        {
            return false; ///< at least one "no match"
        }
    }
    return true;  ///< all characters meet criteria
}
int main()
{
    std::string townName;
    std::cout << "Enter name of town: ";
    while (std::getline(std::cin, townName) && !lettersOrSpaces(townName))
    {
        std::cout << "Enter the town name - alphabet only: ";
    }
    std::cout << "The name of town is: " << townName << std::endl;
    return 0;
}
相关文章: