除了for循环之外,还有另一种方法可以检查它是否是Caesar Cipher中的整数吗? CS50 pset2 凯撒密码

Is there another way to check whether it's an integer in Caesar Cipher other than a for loop? CS50 pset2 Caesar Cipher

我试图通过遍历 argv[1] 中的每个字符并将它们放入 isdigit() 来检查 argv[1] 是否为整数。从技术上讲,它可以工作,但不完全是我想要的方式。

这是我的代码。

int main(int argc, string argv[])

{
    if (argc != 2)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }
    else
    {
        for (int i = 0; i < strlen(argv[1]); i++)
        {
            if( !isdigit(argv[1][i]))
            {
                printf("Usage: ./caesar key\n");
                return 1;
            }
            else
            {
                printf("Sucess\n");
                printf("%s\n", argv[1]);
            }
        }
    }
}

Code

如您所见,通过遍历字符串,程序会为每个字符打印出一行新的响应。我想知道是否有另一种方法来验证输入并只打印一次响应?

$ ./caesar 20
Sucess
20
Sucess
20
$ 
$ ./caser xyz
bash: ./caser: No such file or directory
$ ./caesar 20
Sucess
20
Sucess
20
$ ./caesar xyz
Usage: ./caesar key
$ ./caesar 20x
Sucess
20x
Sucess
20x
Usage: ./caesar key
$ 

terminal

因为 return 退出函数,所以不需要在包含 returnif 分支之后使用 else – 如果 if 路径被占用,if 保留 运行.

之后没有任何内容
int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    for (int i = 0; i < strlen(argv[1]); i++)
    {
        if (!isdigit(argv[1][i]))
        {
            printf("Usage: ./caesar key\n");
            return 1;
        }

        printf("Sucess\n");
        printf("%s\n", argv[1]);
    }
}

从那时起,当所有数字都已检查时,可能更容易看出在循环之后移动成功消息是安全的。

int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    for (int i = 0; i < strlen(argv[1]); i++)
    {
        if (!isdigit(argv[1][i]))
        {
            printf("Usage: ./caesar key\n");
            return 1;
        }
    }

    printf("Success\n");
    printf("%s\n", argv[1]);
}