函数返回零

时间:2018-07-21 19:01:04

标签: c arrays char

我有一个数组,其中每个元素的结构都带有名称和整数值。

struct variable_table_element
    {
        char    name[VARIABLE_TABLE_ELEMENT_NAME_SIZE];
        int     value1;
    };

除此以外,我还创建了两个函数。首先填充表的元素之一。其次,按名称搜索数组的元素并返回其值。

第一:

void add_element_to_table(char input_name[VARIABLE_TABLE_ELEMENT_NAME_SIZE], int input_value)
    {
        variable_table[amount_of_full_table_element].value1 = input_value;

        for (int x = 0 ; x < VARIABLE_TABLE_ELEMENT_NAME_SIZE; x++) 
        {
            variable_table[amount_of_full_table_element].name[x] = input_name[x];
        }   


    }

第二:

int return_element_from_table(char input_name[VARIABLE_TABLE_ELEMENT_NAME_SIZE])
    {
        for (int x = 0; x < amount_of_full_table_element; x++)
        {
            if (variable_table[x].name == input_name)
            {
                return variable_table[x].value1;
            }
        }
    }

我在main()中这样做:

add_element_to_table("name222",4);
int rw = return_element_from_table("name222");

在这种情况下,rw的值为0。

1 个答案:

答案 0 :(得分:3)

您在字符串比较中有错误。必须更改

 if (variable_table[x].name == input_name)

收件人:-

 if (strcmp(variable_table[x].name, input_name)==0) 

在C字符串中,您不能(有用地)使用==比较字符串,而需要使用strcmp()

您还忘记了增加 full_table_element 的值。因此,此for循环for (int x = 0; x < amount_of_full_table_element; x++)总是失败。您需要在函数amount_of_full_table_element中增加add_element_to_table()的值。

尝试此修改后的代码:-

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

#define VARIABLE_TABLE_ELEMENT_NAME_SIZE 30
#define MAX_STRING_SIZE 60
#define NUMBER_OF_VARIABLES 30

//structure of element of table
struct variable_table_element
{
    char name[VARIABLE_TABLE_ELEMENT_NAME_SIZE];
    int value1;
};

//global variabels
struct variable_table_element variable_table[NUMBER_OF_VARIABLES];
int amount_of_full_table_element = 0;

// add integer to table
void add_element_to_table(char input_name[VARIABLE_TABLE_ELEMENT_NAME_SIZE], int input_value)
{
    variable_table[amount_of_full_table_element].value1 = input_value;

    for (int x = 0; x < VARIABLE_TABLE_ELEMENT_NAME_SIZE; x++)
        variable_table[amount_of_full_table_element].name[x] = input_name[x];
    amount_of_full_table_element++; // increment amount_of_full_table_elemen
}

int return_element_from_table(char input_name[VARIABLE_TABLE_ELEMENT_NAME_SIZE])
{
    for (int x = 0; x < amount_of_full_table_element; x++)
    {
        if (strcmp(variable_table[x].name, input_name) == 0) // string comparison in c
        {
            return variable_table[x].value1;
        }
    }
    return 0; // default return
}

int main()
{
    add_element_to_table("name222", 4);

    int rw = return_element_from_table("name222");

    printf("%i \n", variable_table[0].value1);
    printf("%i", rw);
    return 0;                                    // main needs a return 0
}

您还忘记提供默认的return类型来使用return_element_from_table(),而return 0用于main()