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语句中(参见上面的评论)。
为什么我的第一个节点默认?
答案 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)));
}
试试这个,希望它有效,这是你的问题..