所以我有这个程序,我把头从头放在一起c。它来自第6章 - 数据结构章节......我的问题是输出显示了所有以前列出的条目以及最后输入的标准输入名称。所以相反,当程序打印几乎所有东西时,显示一切打印出来我很难形容。如果你只是复制并粘贴到你的机器上的文本编辑器并运行代码,你会明白我的意思。c程序不按预期输出
这本书展示了使用<重定向工具获取岛名文件的程序。当我尝试这个时,它打印第一个名字的第二个名字和第一个名字。然后是下一个名字和第二个名字......然后是下一个名字和第三个,第二个和第一个名字......等,取决于有多少名字。在标准输入中的终端中输入文本时也会发生此行为。
如果我更改了代码说显示器(下)它的工作原理接近我所期望的,但它仍然打印出一个额外的空白行,有可能是内存泄漏
此代码是相当多了我的头可以找出为什么它是这样打印?
我会先问c讨论板的头部,但我想先问stackoverflow并立即得到答案。
我的代码如下。如果您将其复制并粘贴到文本编辑器中,它不应该看起来像一堵文字墙。
快乐编码。
#include <stdio.h> // basic input output
#include <stdlib.h> // for obtaining and releasing heap memory malloc and free...
#include <string.h> // for the stringdup method
typedef struct island {
char *name;
char *opens;
char *closes;
struct island *next;
} island;
void display(island *madonna);
island* create(char *name);
void release(island *start);
int main()
{
/* create islands */
island *start = NULL;
island *i = NULL;
island *next = NULL;
char name[80];
puts("enter island name...");
for(; fgets(name, 80, stdin) != NULL; i = next) {
next = create(name);
if(start == NULL)
start = next;
if (i != NULL)
i -> next = next;
display(start);
}
release(start);
}
// display method
void display(island *start)
{
island *i = start;
if (i == NULL)
puts("i equals NULL ");
for(;i != NULL; i = i ->next) {
printf("Name: %s open: %s-%s\n", i->name, i->opens, i->closes);
}
}
// create method
island* create(char *name)
{
island *i = malloc(sizeof(island));
i->name = strdup(name);
i->opens = "09:00";
i->closes = "17:00";
i->next = NULL;
return i;
}
// release method
void release(island *start)
{
island *i = start;
island *next = NULL;
for(; i != NULL; i = next) {
next = i-> next;
free(i->name); // must free this first because of strdup uses heap memory
free(i);
}
}
你需要做'display(i);'而不是'display(start);' – 2013-05-06 05:25:49
...或者将'display()'移到循环之外。 – WhozCraig 2013-05-06 05:27:52
我不能相信有人标记了这个问题。无论如何感谢迄今为止的帮助。 @WhozCraig如果我将display()从循环中移出,程序只是在那里进行输入,但实际上并没有显示任何内容...... – 2013-05-06 05:33:52