【问题标题】:How to update a field in a struct?如何更新结构中的字段?
【发布时间】:2017-06-17 14:48:15
【问题描述】:

我有一个struct,里面有几天。我用 Eclipse 编写了一些长代码,并将结构放在与 main() 不同的文件中的 C 文件中。现在,在main() 中,我编写了一个函数,该函数转到struct 并更新day 字段——由于某种原因,该字段没有更新。我尝试对此进行调试,但如果我放置断点(Eclipse 问题),调试器会突然停止——即使代码有效,但我得到的结果是错误的。所以我添加了printf 来查看这些字段是否真的更新了,我发现它们没有。

这里是struct

    typedef struct roomorder_t* Roomorder;

    struct roomorder_t {
        int room_id;
        int days_till_order;
        int order_hour;
    };

    // function in the same c file that updates the day
    void updateRoomOrderDay(Roomorder roomorder){
        int curr_day=roomorder->days_till_order;
        curr_day-=1;
        return;
    }

int GetRoomOrderDaysTillOrder(Roomorder roomorder){
    if(roomorder==NULL){
        return FAIL;
    }
    return roomorder->days_till_order;
}

    // here how i used the function in the main file to update :



     static void EscapeUpdateDay(Escape escape){
                     // here i wrote a code to find the roomorder struct i am 
                      //looking 
                     //for to update and i found it (curr_order)
                       Roomorder curr_order=setGetFirst(roomorders);
                       printf("days_till_order_before=d\n",GetRoomOrderDaysTillOrder(curr_order));
                        updateRoomOrderDay(curr_order);
printf("days_till_order_after=%d\n",GetRoomOrderDaysTillOrder(curr_order));

        }

更新:好的,所以当天确实更新了,但发生了相反的情况!我加了一个 printf 和一个解释发生了什么的例子:我打印了这一天 在更新之前和之后,它确实发生了变化,但不是 例如减去一天它增加了一天:

//days_till_order_before=7 (before the update)
//days_till_order_after=8 (after the update)

// 我也确实将 updateRoomOrderDay 函数更改为您所说的 我。

roomorder->days_till_order-=1;

我做错了什么?

【问题讨论】:

  • 你需要阅读关于指针的章节
  • 不,我现在不想更改所有内容并使用指针!!
  • 代码非常长,而且一切正常,但是这个!我只想知道这是错的吗??
  • 请不要更改帖子,以免答案不再有意义。添加到文章末尾
  • 我以为我在写东西,哈哈,好吧,我真的很抱歉!

标签: c eclipse struct


【解决方案1】:

你只是在代码中更新一个局部变量

void updateRoomOrderDay(Roomorder roomorder){
    int curr_day=roomorder->days_till_order;
    curr_day-=1;
    return;
}

把它改成(我猜)

void updateRoomOrderDay(Roomorder roomorder){
    roomorder->days_till_order = roomorder->days_till_order - 1;
}

PS:typedef struct roomorder_t* Roomorder; - 这是一个不好的做法,因为你隐藏了一个指针

编辑

现在用代码武装起来

int GetRoomOrderDaysTillOrder(Roomorder roomorder){
    if(roomorder==NULL){
        return FAIL;
    }
    return roomorder->days_till_order;
}

您的语义不正确。您要么返回一个值,要么返回一个错误代码。 FAIL的值是多少?

【讨论】:

  • 这不是问题:/我的意思是这是错误的,我会修复它,但字段的 curr_order 日期仍然没有改变
  • 结构中的curr_xxxx(这里有两个名字)在哪里?
  • 我没听懂你的问题!!
  • curr_order 是我一直在寻找的结构,我现在找到了它,我使用函数 updateRoomOrderDay 来更新它的日期 //
  • 这条线正确吗?? updateRoomOrderDay(curr_order);
【解决方案2】:

这可能会有所帮助:

在这部分代码中:

void updateRoomOrderDay(Roomorder roomorder){
    int curr_day=roomorder->days_till_order;
    curr_day-=1;
    return;
}

您首先将roomorder->days_till_order 的值存储在一个整数变量中,然后将该整数变量的值减1(这对roomorder->days_till_order 的值没有影响),因此,您需要将这部分更改为:

void updateRoomOrderDay(Roomorder roomorder){
    int curr_day=roomorder->days_till_order;
    curr_day-=1;
    roomorder->days_till_order = curr_day;
    return;
}

或者,您可以这样做:

void updateRoomOrderDay(Roomorder roomorder){
    roomorder->days_till_order -= 1;
    return;
}

【讨论】:

  • 我改变了你的答案而不是问题我真的很抱歉这是错误的:\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多