首页 > 解决方案 > isdigit 函数未捕获 argv[] 中的混合值

问题描述

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

int main(int argc, char *argv[])
{
    // check for correct 1 integer argument else print instructions
    if (argc == 2 && isdigit(*argv[1]))
    {
        printf("plaintext: ");    
        printf("rawtext: ");
        return 0;
    }
    else
    {
        printf("Usage: [KEY]\n");
        return 1;
    }

}

如果用户输入 ./program 2z 但 isdigit 没有捕捉到“z”,程序应该打印“Usage: [KEY]”。有没有办法纠正这个问题,或者还有其他替代 isdigit 函数的方法吗?

标签: c

解决方案


您需要isdigit()循环调用,测试每个字符,因为它一次只检查一个字符。

if (argc == 2 && argv[1][0]) {
    for (int i = 0; argv[1][i]; i++) {
        if (!isdigit(argv[1][i]) {
            printf("Error: key must be numeric\n");
            return 1;
        }
    }
    printf("plaintext: ");    
    printf("rawtext: ");
    return 0;
} else {
    printf("Usage: %s key\n", argv[0]);
    return 1;
}

推荐阅读