C语言 - 不能检查getchar()是字母还是数字

时间:2017-09-08 02:01:34

标签: c

请告诉我为什么else if不起作用? 我试图检查输入值是否正确。 如果不是isalpha()isdigit()则会出错! 除了else if之外,一切正常! 谢谢!

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char name;
    int len = 0;

    printf("Enter the user name: ");
    name = getchar();

    while (name != '\n')
    {

        name = getchar();
        int i;
        for (i = 0; i <= (sizeof(name)/2); i ++)
        {
            len++; 
        }
    }

    printf("len = %d\n", len);

    if((len < 5) || (len > 10 ))
    {
        printf("Output: input is invalid"); 
    }
    else if((isdigit(name)) || (isalpha(name))) //this one does not work
    {
        printf("invalid");
    }
    else
    {
        printf("Output: input is invalid");
        return 0;
    }   

    return (0); 
}

1 个答案:

答案 0 :(得分:0)

由于在name中读取值之前打印的消息是输入用户名,并且用户名通常是字符串,我想您正在读取字符串而不是单个字符。

如果是这种情况,请更改

char name;

char name[20]; //20 is just a number. Make it bigger if you need

因为字符串只是一个字符序列,可以存储在字符数组中。

您可以使用fgets()阅读name

fgets(name, sizeof(name), stdin);

fgets会在遇到\n时停止阅读,但\n也会存储在name中。

因此请将\n替换为\0以标记字符串的结尾。

name[strlen(name)-1]='\0';

使用strlen()查找字符串的长度以存储到len

else if((isdigit(name)) || (isalpha(name))) //this one does not work
{
    printf("invalid");
}

如果您要检查nameelse if中输入的最后一个字符,可能会将其重写为

else if(isalnum(name[len-1]))
{
    printf("invalid");
}
如果

isalnum()的参数是字母数字,则

name将返回非零值。


<小时/>

现在,如果您确实将else if表示为单个字符,只需要在name中进行最后输入的字符进行比较。

如果charsizeof(char)1必须是for (i = 0; i <= (sizeof(name)/2); i ++) { len++; } 。所以

len++;

等同于

sizeof(name)/2

0getchar()

请注意,int会返回char而非EOF,如果发生错误,则返回的值为while (name != '\n' && name != EOF)

尝试

"styles": [
            "content/css/vendor.css",
            "content/css/global.css",
             "styles.css",
            "../node_modules/bootstrap/dist/css/bootstrap.css",
            "../node_modules/font-awesome/css/font-awesome.css",
            "../node_modules/ionicons/css/ionicons.css",
            "_variables.less",
            "../node_modules/icheck/skins/flat/blue.css",
            "../node_modules/morris.js/morris.css",
            "../node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker3.css",
            "../node_modules/admin-lte/plugins/daterangepicker/daterangepicker.css",
            "../node_modules/bootstrap3-wysihtml5-bower/dist/bootstrap3-wysihtml5.css"
        ],
        "scripts": [  "../node_modules/jquery/dist/jquery.js",
        "../node_modules/jqueryui/jquery-ui.js",
        "../node_modules/bootstrap/dist/js/bootstrap.js",
        "../node_modules/raphael/raphael.js",
        "../node_modules/morris.js/morris.js",
        "../node_modules/jquery-sparkline/jquery.sparkline.js",
        "../node_modules/jquery-knob/dist/jquery.knob.min.js",
        "../node_modules/moment/moment.js",
        "../node_modules/daterangepicker/daterangepicker.js",
        "../node_modules/bootstrap-datepicker/js/bootstrap-datepicker.js",
        "../node_modules/jquery-slimscroll/jquery.slimscroll.js",
        "../node_modules/bootstrap3-wysihtml5-bower/dist/bootstrap3-wysihtml5.all.js",
        "../node_modules/icheck/icheck.js",
        "../node_modules/admin-lte/dist/js/app.js",
        "assets/js/scripts.js"]