函数检查 argc 和 argv cs50。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数检查 argc 和 argv cs50。相关的知识,希望对你有一定的参考价值。

试图写一个函数来检查 agrc == 2 , argv[1] 不是负数,而且 argv[1] 中只有数字,否则主程序就不会运行,我们输入类似于 "Error! .代码键 "这样的信息,如果我们输入 "Error! .code key "所以如果我们输入.code -1或.code 123 gdf或.code 123sdf,我们将面临错误信息,主程序将无法运行,但如果我们输入.code 123,我们就会很好,程序将进一步运行。

int validkey(int argc, string y)
{   

    int yl = strlen(y);

    if (argc == 2 && atoi(y) > 0) //atoi coverts string into int
    {
        for (int i = 0; i < yl; i++)
        {
            if (isdigit(y[i]))
                {
                printf("we good
");
                return 0;
                }
            else
                {
                printf("Usage: ./code key
");
                return 1;
                }
        }
    }
    else
    {
        printf("Usage: ./code key
");
        return 1;
    }
return 0;
}

所以,在主程序中,我们有这样的东西。if (validkey(argc,argv[1])) 但这个函数根本不工作,无论我们输入什么,它都不会破坏主程序(返回1;应该破坏它?),如果我们输入.code 123ads,它将通过检查并返回0;我做错了什么?

答案

好吧,我明白是哪里出了问题,首先最好用以下方法解决这个问题 boolint其次重要的是要了解如何循环工作。其检查 y[i] 而如果这 true 所以如果 y[0] 是数字循环不走了,不要检查了 y[1] y[2] 等,其停止和 returns 0因此,如果我们输入2D3d循环将检查出 y[0] 它是2,所以它的数字,所以我们很好,并返回0,而不是cheking y[1]......等等,所以我的新手解决方案是添加另一个int veriable。counter = 0 举例来说

if(isdigit(y[i]))
{
    coounter++;
    if (counter == yl)
    {
        printf("we good
");
        return 0;
    }
}

所以最终变。

// check_the_key(argc, argv[1])
bool check_the_key(int argc, string argv)
{
    // atoi coverts string into int
    int key = atoi(argv);
    if (argc == 2 && key > 0)
    {
        int counter = 0;
        int lenv = strlen(argv);
        for (int i = 0; i < lenv; i++)
        {
            if (isdigit(argv[i]))
            {
                counter++;
            }
            if (lenv == counter)
            {
                printf("we good
");
                return true;
            }

        }
    }
    printf("Usage: ./caesar key
");
    return false;
}

以上是关于函数检查 argc 和 argv cs50。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 argc 和 argv 调用函数?

如何从库函数中访问 c​​++ 中的 argc 和 argv

为啥要检查 (*argv == NULL)? [复制]

在代码中创建 argc argv [重复]

main函数形参argc和argv解析

怎么使用argv