用链表读取C中的输入

时间:2011-01-16 20:42:08

标签: c input parameters linked-list gets

我已经制作了一个链接列表。它的元素保留了上一个和下一个项目的地址。它从输入文件中获取命令。它检测命令并使用以下语句作为参数。 (文字:add_to_front john - >表示:add_to_front(john)

代码:http://pastebin.com/KcAm1y3L

当我尝试从输入文件中提供命令时,它会反复给出相同的输出。但是,如果我手动在main()中写入输入,则可以正常工作。

对于ex输入文件:

add_to_front john
add_to_back jane
add_to_back jane
print

(不幸的是)输出是:

>add_to_front john
>add_to_back jane
>add_to_back jane
>print
 jane
 jane
 jane

虽然,如果我写

add_to_front(john);
add_to_back(jane);
add_to_back(jane);
print();

而不是这个命令检查:

while (scanf("%s",command)!=EOF)
{
    if (strcmp(command,"add_to_front")==0)
    {
        gets(parameter);
        add_to_front(parameter);
    }
    else if (strcmp(command,"add_to_back")==0)
    {
        gets(parameter);
        add_to_back(parameter);
    }
    else if (strcmp(command,"remove_from_back")==0)
        remove_from_back(parameter);
    ...
        printf(" HUH?\n");
    }
}

main()中,它会给出正确的输出。

我知道要问很多但是这件事困扰了我2天。你觉得我做错了什么?

1 个答案:

答案 0 :(得分:2)

您没有显示上面的相关代码。最有可能的情况是,您不会将读取的数据复制到列表中,因此最终会存储读取的最后一个值,一遍又一遍。


查看粘贴箱中的代码,确实是麻烦;你不要将字符串复制到列表中 - 只需复制指针即可。您需要添加代码以为字符串分配空间并复制字符串。如果它可用,则函数strdup()可以很好地完成工作。如果没有,您可以轻松编写自己的。请注意,这意味着您还必须释放分配的空间。