【问题标题】:Numbers and letters validation in CC中的数字和字母验证
【发布时间】:2021-04-11 18:54:07
【问题描述】:

我是编程新手,我面临着验证。我尝试编写一个程序,程序获取用户的NameAge 作为输入。我需要检查名称是否仅包含字母(它可以有空格)以及年龄是否仅来自数字。 我尝试使用函数IsAlpha()IsDigit(),但我认为在我的程序中这不是正确的方法,因为它只检查第一个字符。 例如,如果用户输入“Jane123 或 J0nas”,则会出现错误,并且与数字相同。

我想我应该在 if 中使用一些东西。有什么建议?谢谢。

【问题讨论】:

  • 包括ctype.h 并查看isalpha()isspace()isdigit()。一次检查 1 个字符。
  • 我想我应该在 while 中使用一些东西。是的,您需要使用循环。
  • 字母和数字的概念很复杂,因为您应该使用UTF-8 everywhere。像éÊ(法语字母)或我在俄语中的姓氏(西里尔字母)СТАРЫНКЕВИЧ 这样的字符呢?您可以考虑使用Glib libraryGNU libunistring ... ❶ (U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE) 是一个数字吗?

标签: c validation digits letter


【解决方案1】:
bool checkName(char Name[]) {
    for (int i = 0; Name[i]; ++i) {
        if(!isalpha(Name[i])) {
            printf("Error!!!\n");
            return 0;
        }
    }

    return 1;
}

int main() {
    char Name[] = "Jane123";
    checkName(Name);
}

如果你想用isdigit() 这个函数,只需复制粘贴并将isalpha() 替换为isdigit()

【讨论】:

    【解决方案2】:

    您可以遍历输入并检查每个字符,或者使用strspn

    const char alpha[] = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    const char digit[] = "0123456789";
    
    if (strlen(Name) != strspn(Name, alpha)) {
        printf("Invalid Username\n");
        exit(-1);
    }
    
    if (strlen(Age) != strspn(Age, digit)) {
        printf("Invalid Age\n");
        exit(-1);
    }
    

    但是请注意,如果您从函数中获取输入,例如 fgets,您可能有一个包含换行符的字符,并且需要先修剪它们(从开头和/或结尾删除所有空格)。

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多