c - 我不知道为什么我下面的结构没有被设置

标签 c struct

goodsubject-lm:chap6 varunvb$ cat linkedlists.c

#include <stdio.h>

typedef struct island {
  char *name;
  char *opens;
  char *closes;
  struct island *next;
} island;

island amity = {"Amity", "09:00", "17:00", NULL};
island craggy = {"Craggy", "09:00", "18:00", NULL};
island isla_nublar = {"Shutter", "09:00", "19:00", NULL};
island skull = {"Skull", "09:00", "20:00", NULL};
island shutter = {"Shutter", "09:00", ":21:00", NULL};
amity.next = &craggy;
craggy.next = &isla_nublar;
isla_nublar.next = &skull;
skull.next = &shutter;

void display (island *start) {

  island *i = start;

  for (; i != NULL; i == i->next) {
     printf ("Name: %s\nOpens: %s\ncloses: %s\n", i->name, i->opens, i->closes);
     }
}

int main ()
{
 display (&amity);
 display (&craggy);
 display (&isla_nublar);
 display (&skull);
 return 0;
}

我得到的错误如下。

linkedlists.c:15:1: error: unknown type name 'amity'
amity.next = &craggy;
^
linkedlists.c:15:6: error: expected identifier or '('
amity.next = &craggy;
     ^
linkedlists.c:16:1: error: unknown type name 'craggy'
craggy.next = &isla_nublar;
^
linkedlists.c:16:7: error: expected identifier or '('
craggy.next = &isla_nublar;
      ^
linkedlists.c:17:1: error: unknown type name 'isla_nublar'
isla_nublar.next = &skull;
^
linkedlists.c:17:12: error: expected identifier or '('
isla_nublar.next = &skull;
           ^
linkedlists.c:18:1: error: unknown type name 'skull'
skull.next = &shutter;
^
linkedlists.c:18:6: error: expected identifier or '('
skull.next = &shutter;
     ^
linkedlists.c:24:23: warning: equality comparison result unused [-Wunused-comparison]
  for (; i != NULL; i == i->next) {
                    ~~^~~~~~~~~~
linkedlists.c:24:23: note: use '=' to turn this equality comparison into an assignment
  for (; i != NULL; i == i->next) {
                      ^~
                      =
1 warning and 8 errors generated.

最佳答案

for (; i != NULL; i == i->next) {

我想你的意思是 i = i->next。您的循环要么是无限的,要么永远不会运行。

对于您的错误,您不应使用全局变量,而应在您的代码中创建和链接您的元素。正如 M Oehm 评论的那样,至少将您的 x.next = &y 语句移动到您的 main 中。

您可以有一个岛工厂函数,它分配一个指向island 的指针并填充它,然后返回它。

例如:

island *add_island(island *begin, char *name, char *opens, char *closes)
{
  island *new = malloc(sizeof(*new));

  if (new == NULL)
  {
    printf("Malloc error in add_island");
    return NULL;
  }
  new->name = name;
  new->opens = opens;
  new->closes = closes;
  new->next = begin;

  return new;
}

int main(void)
{
  island *list = add_island(NULL, "last island", "12:00", "02:00");
  list = add_island(list, "first island", "20:00", "10:00");
  display(list);
}

add_island 充当对给定列表的推送。

关于c - 我不知道为什么我下面的结构没有被设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462733/

相关文章:

c - 获取结构体调用函数的指针

struct - Swift 结构找不到成员

c - 结构到结构赋值后的奇怪错误

使用 union 计算 log2

c - 操作包含文件的搜索路径

c - 为什么编译器不优化掉中断代码?

c - 为什么 ptrdiff_t 与 long long 不同?

c - 循环遍历 struct - C 中的属性

c - 打印结构的 int 成员变量给出了错误的值

c++ - 从头开始实现经典 OPC DA 服务器