【发布时间】:2016-05-29 22:36:42
【问题描述】:
我正在用 C 语言编写这个迷宫游戏。我有字符串 name[15] 和 score[15],所以当我打印它们时,输出是“John 1000”,所以我需要在每次用户完成游戏,然后如果另一个用户获得更高或更低的分数,则对其进行排序,因此文件应该在 3 次运行游戏并完成后以这样的方式结束:
- 克拉克 25000
- 约翰 23000
- 路易 21000
【问题讨论】:
我正在用 C 语言编写这个迷宫游戏。我有字符串 name[15] 和 score[15],所以当我打印它们时,输出是“John 1000”,所以我需要在每次用户完成游戏,然后如果另一个用户获得更高或更低的分数,则对其进行排序,因此文件应该在 3 次运行游戏并完成后以这样的方式结束:
【问题讨论】:
你应该做的是,每次用户完成游戏时,你加载动态分配的数组,对它进行排序,然后重写文件。
【讨论】:
首先取一个结构体s,其中char str1[]、char str2[]和struct s *next作为字段。 (用于制作链表) 因为 ' ' 和 '\n' 是这里的分隔符,所以读取第一个字符串直到我们将 ' ' 打入 s->str1[] 和第二个字符串 s->str2[] 直到我们打入 '\n' (之后malloc() 的结构体 s)
所以当要添加新条目时,我们遍历列表。如果第一个节点值(atoi(s->str2[])小于新条目的值,则将新条目作为第一个节点。如果不是,则遍历直到链表的节点值小于新条目的值。
所以基本上,我们在插入列表本身的同时对其进行排序(降序到值)。
所以如果 (a)6,(b)2,(c)7,(d)8,(e)5,(f)1 是我们可以像下面这样排序的值: 1. (a)6->NULL 2. (a)6->(b)2->NULL 3. (c)7->(a)6->(b)2->NULL 4. (d)8->(c)7->(a)6->(b)2->NULL 5. (d)8->(c)7->(a)6->(e)5->(b)2->NULL 6. (d)8->(c)7->(a)6->(e)5->(b)2->(f)1->NULL
【讨论】: