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

时间:2019-07-14 06:49:06

标签: c cs50 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

1 个答案:

答案 0 :(得分:1)

由于return退出了该功能,因此在包含else的{​​{1}}分支之后,无需使用if –如果采用了return路径,在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]);
    }
}