2014-01-12 3 views
0

Английский не мой материнский язык, я прошу прощения за любые грамматические ошибки в описании или в коде, я перевел его, чтобы поделиться им с вами.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.

+2

Я не могу воспроизвести эту ошибку: http://ideone.com/CnCz1S –

+2

Вы действительно думаете, что наиболее подходящее место для определения вашей структуры с помощью 'typedef' находится внутри' else'? Прощай читаемость кода ... –

+1

Если вы хотите, чтобы этот код компилировался, он будет неэффективным. Давайте начнем с основ: вы читаете весь файл в массив 'struct base tab []', а затем попробуйте включить его в список, но только выделите одну запись и используйте значение 'ind-> next' перед его четный набор, а затем вы проверяете только один указатель, чтобы увидеть, соответствует ли он 'word_remove'. Возможно, вы достигли слишком высокого уровня. – woolstar

ответ

1

В этом фрагменте

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; 
} 

Вы не Инициирование ind любое допустимое значение. Вероятно, вы хотели написать ind = el вместо head. Кроме того, не бросайте malloc().

Смежные вопросы