我有一个数组,其中每个元素的结构都带有名称和整数值。
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。
答案 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()
。