我正在尝试从文件中逐行读取格式化字符串并将其存储在链接列表中。
我的类型定义:
typedef struct s_deck {
char name[16];
int atk;
int def;
int cost;
struct s_deck* next;
} card;
我正在读取的文件示例:
Line 1: Name 4 4 5
Line 2: Name2 5 5 5
我正在尝试实现的功能来做这样的事情......
card *LoadDeck() {
FILE* file = fopen("text", "r");
if(file == NULL) {
printf("unable to open file...\n");
}
char line[16];
card* start = NULL;
card* newest = NULL;
card* previous = NULL;
fgets(line, 15, file);
card* newCard = malloc(sizeof(card));
sscanf(line, "%s %d %d %d\n", newCard->name, &newCard->atk,
&newCard->def, &newCard->cost);
printf("Added:%s Attack:%d Defense:%d Cost:%d\n", newCard->name, newCard->atk,
newCard->def, newCard->cost);
if (start == NULL) {
start = LoadDeck(NULL);
newest = start;
}
else {
newest = LoadDeck(newest);
}
if (previous != NULL) {
previous->next = newCard;
}
fclose(file);
return newCard;
}
所以我遇到的问题是它是一个无限循环,它只读取第一行。我的 printf 是为了看看它在做什么,并且......它正确地读取了该行,但它只是继续这样做并且永远不会停止。
我不知道它是否正确创建了一个链接列表。我还没有走到那一步。我认为我的实现是正确的,但仅脱离书本很难。我试图在这里找到一些问题,但他们正在读取的文件比我的复杂得多,所以我认为应该有一种更简单的方法。
最佳答案
嗯,我知道也许我应该把这个放在评论中,但抱歉我没有足够的声誉来做到这一点。不管怎样,我认为你的程序无限循环,因为你的 start 变量总是 NULL,第一次调用该函数将导致函数在发现 start == NULL 后调用自身true,后续调用将始终导致无限递归,因为 start 始终为 NULL。 你写的这些行是黑洞:
if (start == NULL) {
start = LoadDeck(NULL);
newest = start; }
它不会为 start 变量分配任何内容,它只会导致无限递归。
关于c - 从文件中读取并将格式化的行输入到链接列表中。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339101/