【问题标题】:Create a function to input data into the structure创建一个函数以将数据输入到结构中
【发布时间】:2021-03-23 03:53:34
【问题描述】:

我创建了一个这样的结构:

struct _symbol_ {
    int symbol_id;
    char *symbol_name;

    struct _symbol_ *next_symbol;
};

struct _symbol_ *symbol;

接下来,我创建了一个将数据添加到结构中的函数:

struct _symbol_ *new_symbol(int id, char *name, struct _symbol_ *next) {
    struct _symbol_ *s;
    s = (struct _symbol_ *)malloc(sizeof(struct _symbol_));

    if(s == NULL) {
        printf("unable to malloc _symbol_ structure\n");
        exit(1);
    }

    s -> symbol_id = id;

    if(name == NULL)
        s -> symbol_name = NULL;
    else {
        s -> symbol_name = malloc(strlen(name) + 1);
        strcpy(s -> symbol_name, name);
    }

    s -> next_symbol = NULL;
    return s;
}

我知道这行得通!所以这就是问题.. 数据可以输入如下

symbol = new_symbol(10, "a", NULL);
symbol -> next_symbol = new_symbol(10, "a", NULL);
symbol -> next_symbol -> next_symbol = new_symbol(10, "a", NULL);

所以我写了另一个函数来输入数据:

struct _symbol_ *add_symbol(int id, char *name) {
    if(symbol == NULL)
        return symbol = new_symbol(id, name, NULL);
    else
        return symbol -> next_symbol = new_symbol(id, name, NULL);
}

但这里只输入数据 symbol, symbol -> next_symbol 。那么如何编写一个函数来一一正确输入数据呢?

我的意思是:

function INPUT_DATA(string name, structure pointer) {
  // Content
}

INPUT_DATA("1", symbol);
INPUT_DATA("2", symbol);
INPUT_DATA("3", symbol);

data 1 => symbol = "1"
data 2 => symbol -> next_symbol = "2"
data 3 => symbol -> next_symbol -> next_symbol = "3"

【问题讨论】:

  • INPUT_DATA() 应该包含一个循环,找到链的末端并将新符号放在那里。
  • 谢谢@Barmar。成功了???

标签: c recursion struct


【解决方案1】:
struct _symbol_ *add_symbol(int id, char *name) {
    int check = find_symbol(name, symbol);

    if(check == 1) {
        printf("symbol already available >>> %s\n", name);
        exit(1);
    }

    if(symbol == NULL)
        return symbol = new_symbol(id, name, NULL);
    else {
        // Add this code
        struct _symbol_ *current_node = symbol;

        while(current_node -> next_symbol != NULL) {
            current_node = current_node -> next_symbol;
        }

        return current_node -> next_symbol = new_symbol(id, name, NULL);
    }
}

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2022-01-18
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多