在C中打印不需要的空行

时间:2014-03-30 22:04:47

标签: c linked-list printf

我正在编写一个程序,将字符串转换为链接列表,并在C中改变它们。

由于某种原因,在我调用反向功能,然后打印列表后,它会在打印反转列表之前打印一个新行。

例如,说出我的列表'包含... a-> p-> p-> l-> e-> NULL

如果我打电话给{(1}}

,请在main()中

我的输出:

print(list); print(list);

但是,如果我打电话给{(1}}

,请在main()中

我的输出:

apple
apple

这是我的rev()

print(list); list=reverse(list);  print(list);

3 个答案:

答案 0 :(得分:1)

看起来你的名单反转得太好了;列表末尾的NULL正在成为新的头脑,正在创建您关注的空白空间。

要解决此问题,我建议您在while循环中检查head->next是否为NULL

node *rev(node *head){

    node *r_head = NULL;
    while (head->next) {
        node *next = head->next;
        head->next = rev_head;
        r_head = head;
        head = next;
    }
    r_head = head;

    return r_head;
}

此代码尚未经过测试,但我相信它应该有效。

答案 1 :(得分:1)

如果在你的NULL字符之前你的字符串中有一个回车符,它将取代第一个字符,因此开始第二个字符串并带来额外的回报。

作为建议,请将您的回车带回到字符串之外。

答案 2 :(得分:1)

虽然您的问题遗漏了所有细节,但我的ESP告诉我您使用了gets的某种变体作为输入函数,它也捕获了换行符:

gets() ==> "A P P L E [newline]"

然后当你颠倒它时,你最终得到了

"[newline] E L P P A"

当你背靠背打印出原始字符串和新字符串时,你得到了:

"A P P L E [NL] [NL] E L P P A"

而且,如果您已经附加了调试器并逐步完成了代码,就像所有开发人员一样,那么您已经有了答案!