c - 用链表读取 C 中的输入

标签 c input parameters linked-list gets

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

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

当我尝试从输入文件发出命令时,它一遍又一遍地给出相同的输出。但是,如果我手动在 main() 中写入输入,它就会起作用。

对于前输入文件:

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()中它给出了正确的输出。

我知道有很多问题要问,但这件事困扰了我两天。你认为我做错了什么?

最佳答案

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

<小时/>

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

关于c - 用链表读取 C 中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707909/

相关文章:

c - 为什么该函数看不到 "NULL"字符

objective-c - 当新的推送通知到达时重置服务器端徽章计数器

c - 如何修改已传递给 C 函数的指针?

javascript - 如何通过 URL 传递带有对象值的参数

iphone - 使用 C/C++ API 在 sqlite 中使用绑定(bind)参数对选择结果进行排序

javascript - 验证两个输入

javascript - react 组件和无效输入

c# - 默认值设置为 0 的输入在没有 0 的情况下呈现

android - 三星 Galaxy 的运行时异常——手电筒

python - 二元选择过程