Английский не мой материнский язык, я прошу прощения за любые грамматические ошибки в описании или в коде, я перевел его, чтобы поделиться им с вами.C: списки, структуры: ошибка: структура не имеет ни одного члена
Привет, я пишу небольшую программу на C, и мне нужна помощь, я застрял в одной ошибке, которую не могу исправить, я искал здесь, на форумах и в другом месте, но ничего не нашел, помог мне. Остальные функции в программе работают нормально.
Эта функция считывает список слов и категорий из txt-файла, помещает его в структуру, создает список. Пользователь вводит слово, которое хочет удалить из файла, поэтому функция выполняет поиск, если он есть, и удаляет, если это так.
Я не самый лучший со списками, поэтому, возможно, есть действительно основная, глупая проблема здесь, любая помощь, пожалуйста?
void REMOVE_WORD (int howmanylines)
{
FILE *fp;
if ((fp=fopen("words.txt", "r+w"))==NULL)
{printf("Error while opening the file!\n");
exit(1);}
else
{
typedef struct base
{
struct base *next;
char word[25];
char category[15];
} list_els;
struct base tab[howmanylines];
int i=0;
while (!feof(fp))
{
fscanf(fp, "%s", &tab[i].word);
fscanf(fp, "%s", &tab[i].category);
i++;
}
fclose(fp);
list_els *head;
list_els *el=(list_els*)malloc(sizeof(list_els));
list_els *ind=head;
while (ind->next)
{
ind=ind->next;
ind->next=el;
}
printf("What word do you want to remove?\n\n");
char word_remove[25];
scanf("%s", &word_remove);
if (strcmp(ind->next->word, word_remove)==0)
{
printf("Found:\n Word: | Category:\n %s | %s\n", ind->next->word, ind->next->category);
printf("Are you sure you want to remove?\n1)Yes\n 2)No\n\n");
int removing;
if (removing==1)
{
list_els *removed=ind->next;
ind->next=removed->next;
free(removed);
}
else if (removing==2) {printf("Removing cancelled.\n\n");}
else {printf("Wrong operation number!");}
}
else printf("Word not available in the base!\n\n");
}
}
Он показывает мне ошибку «структуры базы» не имеет ни одного члена с именем «слово» в строке, где я использую STRCMP.
Я не могу воспроизвести эту ошибку: http://ideone.com/CnCz1S –
Вы действительно думаете, что наиболее подходящее место для определения вашей структуры с помощью 'typedef' находится внутри' else'? Прощай читаемость кода ... –
Если вы хотите, чтобы этот код компилировался, он будет неэффективным. Давайте начнем с основ: вы читаете весь файл в массив 'struct base tab []', а затем попробуйте включить его в список, но только выделите одну запись и используйте значение 'ind-> next' перед его четный набор, а затем вы проверяете только один указатель, чтобы увидеть, соответствует ли он 'word_remove'. Возможно, вы достигли слишком высокого уровня. – woolstar