Я должен прочитать список слов из файла. В верхней части этого файла находятся 3 числа, первое указывает, сколько имен из списка используется для создания BST, второе - сколько имен мне нужно прочитать из списка, а последнее - сколько имен мне нужно. удалить из списка.
Я прочитал из файла и создал BST, но я не могу понять, как сначала пропустить строки файла, чтобы получить имена, которые мне нужно найти и удалить, а затем выполнить их поиск. имена в BST. Я вполне уверен, что мне нужно открыть файл в главном, чтобы успешно передать открытый файл между функциями для чтения, поэтому я не постоянно запускаю начало в начале файла, но я продолжаю получать ошибки сегментации или неправильные ценности. Ниже приведена копия моей функции чтения файлов и текущий код, который я должен искать по словам.
struct tree_node* wordSearch(node* root, int s, int n, FILE *fptr){
int i;
char word[20];
int itemsBefore;
//Loop through i < n+s
for(i = n - 1; i < n+s; i++){
fscanf(fptr, "%s", word);
//If word is found
if(strcmp(root->name, word) == 0){
printf("%s: Found, number of nodes before: %d", root->name, itemsBefore);
return root;
} else if(strcmp(root->name, word) > 0){
return wordSearch(root->right, s, n, fptr);
} else if(strcmp(root->name, word) < 0){
return wordSearch(root->left, s, n, fptr);
} else {
printf("%s: Not found, number of nodes before: 0", root->name);
}
}
}
File Reader Ниже:
struct tree_node* fileRead(FILE *fptr, int *n, int *s, int *d){
//Declare looping variables
int i;
//Open in.txt
fptr = fopen("in2.txt", "r");
//Check if file is Open
if(!fptr){
perror("Unable to open file\n");
exit(1);
}
//Read first line into variables n, s, d in that order
fscanf(fptr, "%p %p %p", &n, &s, &d);
node *root;
node *newNode;
char word[20];
int nodeCounter;
//For each node under 'n', create a node and insert it into the tree
for(i = 0; i < n; i++){
//If there are no nodes in the tree, create the first node named root
if(nodeCounter == 0){
fscanf(fptr, "%s", word);
printf("Inserting: %s\n", word);
root = create_node(word);
//Else create a new node, fscanf a name into the data and insert it into the tree following root node
} else {
fscanf(fptr, "%s", word);
printf("Inserting: %s\n", word);
newNode = create_node(word);
insert(root, newNode);
}
//Insert each new node
nodeCounter++;
}
//fclose(fptr);
return root;
}
Наконец, ниже приведена копия фактического содержимого файла, из которого я читаю для контекста:
9 3 4 Джуди Мэри Билл Алиса Том Фред Джейн Джо Дейв Джейн Джонс Джуди Алиса Мэри Джуди Фред