繁体   English   中英

无法理解 C 中的函数

[英]Trouble understanding Functions in C

我正在完成一项编程任务。 我在 main 中进行了密钥验证,但决定尝试使其成为一个单独的函数。 我还不太了解函数,所以我看不出我哪里出错了。 每当我运行程序时,即使我知道它不是,我总是只会得到“密钥有效”。 正如我所说,程序在 main 中运行良好。

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

int validate (int c, string v[]); //prototpe validate function

int main (int argc, string argv[])
{
    int validate (int argc, string argv[]); //run validate for argc and argv

    printf("Key is valid\n"); //if valid, print message

}

int validate (int c, string v[])
{
    //Validate that only one Command Line Argument was entered
    if (c != 2) //Check the number if entered commands at execution
    {
        //If more than one, print error message
        printf("Key must be the only Command Line Argument\n");
        return 1; //Return false
    }

    //Validate that Key length is 26 characters
    if (strlen(v[1]) != 26) //Don't forget null 0
    {
        printf("Key must contain exactly 26 characters\n");
        return 1; //Return false
    }

    //Validate that all Key characters are alphabetic
    for (int i = 0, n = strlen(v[1]); i < n; i++)
    {
        //Check each element of the array
        if (isalpha(v[1][i]))
        {
            continue; //Continue if alphabetic
        }
        else
        {
            //if non-alphabetic, print error code
            printf("Key must contain only alphabetic characters\n");
            return 1; //Return false
        }
    }

    //Validate that each Key character is unique
    for (int x = 0, z = strlen(v[1]) - 1; x < z; x++)
    {
        //Create a second loop to compare every element to the first before incrementing the first
        for (int y = x + 1; y < z; y++)
        {
            //Cast array elements to int, check if each element equals next element in array
            if (v[1][x] == v[1][y])
            {
                printf("Key must contain exactly 26 unique characters\n");
                return 1;
            }
        }
    }

    return 0; //Key is valid, so return true
}

您只是声明了函数validate而不是运行它,并且打印Key is valid无条件Key is valid

要运行函数validate和 print Key is valid仅在返回0时才Key is validmain函数应该是这样的:

int main (int argc, string argv[])
{
    if (validate (argc, argv) == 0) //run validate for argc and argv and check its response
    {
        // put printing inside if statement so that it runs only if the condition is true
        printf("Key is valid\n"); //if valid, print message
    }
}

函数声明提示编译器我将返回一个特定的数据类型,我将在参数部分接受给定的数据类型。 例如,

int check(int a, int b); -> return type is int and the function will accept 2 integer parameters.
int mul(int a, float b); -> return type is int and the function will accept 1 integer parameter and 1 float.
void check(); -> returns nothing, accepts nothing

函数调用就像您的代码正在调用要执行的函数。

int c = check(2, 3);
int b = mul(3, 0.12);
check();

您的函数正在返回一些值。 您必须获取该值并根据该值执行其余代码,如下所示。

if (validate (argc, argv) == 0) {
    printf("key is valid");
} else {
    printf("key is not valid");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM