gpt4 book ai didi

c - 使用 C 将 CFG 从文件读取到链表中

转载 作者:行者123 更新时间:2023-11-30 17:01:45 26 4
gpt4 key购买 nike

我的工作是从文件中读取CFG并将其保存在链接列表中。然后遍历链表以删除空产生式。我的逻辑是在链表中使用数组。单个链表节点将指向其值部分中的数组。数组将保存一行CFG,直到新一行。当出现 '\n' 时,将创建一个新节点,并将指向一个数组。该过程将重复直到 EOF。我已经对其进行了编码,但出现段错误

/*the CFG
S>ABe
A>dB
B>AS
*/
typedef struct node {
//int val;
struct node * next;
char arr[5];//the array to save CFG per line
}node_t;
int main() {
node_t * head = NULL;
head = malloc(sizeof(node_t));
FILE *fp;
char c; int i;
fp = fopen("cfg.txt", "r");
while((c = fgetc(fp)) != EOF) {
head->next = malloc(sizeof(node_t));
while(head->next != NULL) { //traverse till end of list
head = head->next;
}
//now adding new line;
for(i=0; i<5; i++) {
head->next->arr[i] = c;
if(c == '>'){
continue;
}else if(c == '\n') {
break;
}
}
}
}

最佳答案

我休息了一下,试运行了我的代码,但它没有任何意义。链表乱了,我不知道我做的时候在想什么。但我已经修复了它并且它正在工作

    #include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdbool.h>
/*the CFG
S>ABe
A>dB|eS|e
B>AS|b
*/
typedef struct node {
//int val;
struct node * next;
char arr[20];//the array to save CFG per line
}node_t;
int main() {
node_t * head = malloc(sizeof(node_t));
node_t * current = malloc(sizeof(node_t));
node_t * root = malloc(sizeof(node_t));
head = current;

FILE *fp;
char c, temp; int i; bool flag = true;
fp = fopen("cfg.txt", "r");
while((c = fgetc(fp)) != EOF) {
if(c == '\n') {
current->next = malloc(sizeof(node_t));
//current->next->next = NULL;
current = current->next;
current->next = NULL;
flag = true;
}else if(c == '>'){continue;}
else if(c == '|'){
current->next = malloc(sizeof(node_t));
current = current->next;
i = 0;
current->arr[i] = temp;
i++;
continue;
}
else {
current->arr[i] = c;
i++;
current->next = NULL;
if(flag){
tmp = c;
flag = false;
}
// continue;
}
}
root = head;
while(root->next != NULL){
for(i=0; i<20; i++) {
printf("%c", root->arr[i]);
}
printf("\n");
root = root->next;
}
fclose(fp);
}

关于c - 使用 C 将 CFG 从文件读取到链表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com