堆栈默认的第一个节点 - c

时间:2016-05-01 02:56:38

标签: c memory struct linked-list stack

typedef struct node {
    double value;
    struct node *prev;
} node_t; 

主要:

if(fgets(str, MAX_LENGTH, stdin)) {
    char *token;
    token = strtok(str, " ");
    while(token != NULL) {
        if(strtod(token, NULL) != 0) { //Issue here
            push(&stack, new_node(strtod(token, NULL)));
        }
......

对于测试用例,如果我的输入是" 1 2"然后我第一次将节点推入堆栈,node_t.prev = NULL(根据需要),值为1(根据需要)。我第二次循环,堆栈中的第一个节点默认(prev = NULL,value = 0)。这发生在if语句中(参见上面的评论)。

为什么我的第一个节点默认?

1 个答案:

答案 0 :(得分:0)

在循环中使用strtod()时,您必须“分别获取第一个令牌”,试试这个......

    token = strtod(token, " ");//get first token and do some test cases with it...
    while(token != NULL) {
    if(strtod(token, NULL) != 0) {
        push(&stack, new_node(strtod(token, NULL)));
    }

试试这个,希望它有效,这是你的问题..