我正在开发一个具有注册系统的程序,您可以在其中注册新成员。
为了提供一些上下文,您注册的名称必须与现有名称不同,只能是一个单词,并且在保存到文件之前变成全部大写。为了避免文件处理中的潜在错误,我只希望用户名是字母,没有数字或特殊字符。
因为我想避免用户可能意外输入的前导和尾随空格,所以我决定将注册的新用户名存储到 char 数组newName
中,但我无法弄清楚如何正确地通过 char 数组来检查任何数字或特殊字符,以便我可以要求用户输入正确的用户名。我尝试过使用不同的循环变体和isalpha()
函数,但还没有找到任何东西。
这是我的代码的那部分,到目前为止,"sorry, wrong username"
无论我输入带有数字/特殊字符还是仅字母的用户名,它都只说明:
char newName[80];
bool valid;
do {
valid = true;
std::cin >> newName;
std::cin.sync();
for (int i = 0; i < 80; i++) {
if (!std::isalpha(newName[i]))
valid = false;
else
valid = true;
}
if (!valid)
std::cout << "Sorry, wrong username." << std::endl;
} while (!valid);
for (int i = 0; i < 80; i ++) {
if (newName[i] != '\0')
newName[i] = toupper(newName[i]);
else
break;
}
for (int i = 0; i < nameList.size(); i++) {
if (nameList.at(i) == newName) {
std::cout << "Sorry, this name already exists. If you are registering a new member, please enter a new name for them." << std::endl;
validName = false;
break;
}
if (nameList.at(i) != newName)
validName = true;
}