我可以让 fgets() 只接受字母吗?

标签 c string validation fgets

所以在这个数据库中我需要有一些限制,比如名字只有字母等等。

但是如果我使用 scanf("%s, c.name) 例如,它只会读取到第一个空格,所以如果 我必须添加 2 个名字,例如 Marie Claire,我不能使用 scanf。

我有一个方法可以检查字符串是否包含数字(将提供),但我想知道是否可以让 fgets() 只接受字母。我也会提供我尝试过的方法,但是当我使用这种方法时,它不接受任何输入,只是跳过它。

printf ("\nPlease enter Name:\n");
    while (fgets (c.name, sizeof (c.name), stdin)  && cCheck(c.name,100) == FALSE);
    {

    }

检查数字的方法[ bool 值是用我这边的 typedef 生成的]

boolean cCheck(char *test, int max)
{
    int x;
    for (x =0; x<max; x++)
    {
        if (isdigit(test[x]))
        {
            return FALSE;
        }
        if (x==max)
        {
            return TRUE;
        }
        x++;

    }
    return TRUE;
}

最佳答案

像下面的代码示例一样,您可以指定 fscanf 只读取字符,如果指定格式说明符,还可以指定 .' '(空格)是可接受的字符来阅读。如果你把 ^ 放在前面,比如 [^a-zA-Z. ],那么它将读取除那些字符之外的所有内容。

#include <stdio.h>

int main()
{
    char s[25];
    printf("enter a string: ");
    scanf("%25[a-zA-Z. ]c\n", s); // reads upto 25 chars of a-z/A-Z and '.', ' '.
    printf("s1: %s\n", s);
    return 0;
}

上述代码的示例输出:

c:\my-src\test-programs>scanf-test.exe
enter a string: dasdasd asdasda 34534536
s1: dasdasd asdasda

c:\my-src\test-programs>scanf-test.exe
enter a string: werfdsfsd3423524525
s1: werfdsfsd

有关详细信息,请参阅以下链接:

fscanf

INFO: scanf() Format Specifications and Syntax

关于我可以让 fgets() 只接受字母吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013289/

相关文章:

json - Curl 和 jq 替换值中的子字符串

regex - 在 bash 脚本中使用密码验证似乎让我在工作中感到困惑

c - 逆向词,指针法

c - 在这种情况下,SIGCHILD信号将如何处理?

c - 如何评估 C 中的 boolean 表达式?

java - 如何在android中创建增量二进制字符串

c++ - 在 C++ 代码中转换字符串

security - "Bobby Tables"XKCD 漫画中的 SQL 注入(inject)是如何工作的?

带有正则表达式验证器回发问题的 ASP.Net FileUpload 控件

c - 如何从 C 中的任何设备(例如键盘)读取原始数据