Ошибка - expected unqualified-id before '{' token - C (СИ)
Формулировка задачи:
ПОМОГИТЕ НАЙТИ ОШИБКУ ПОЖАЛУЙСТА
20 строка(main.cpp|20|error: expected unqualified-id before '{' token|)
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> typedef struct AsFalonour //создание нового типа запись для хранения информационных полей элемента списка { int kol; //количество книг в картотеке char nazv[20]; //название книги int god; //год издания char avt[20]; //фамилия автора книги } book; //имя созданного типа typedef struct spisok //создание нового типа запись для хранения информации элемента списка { book inf; //информационные поля struct spisok* next; //указатель на следующий элемент списка struct spisok* pred; //указатель на предыдущий элемент списка } el; //имя созданного нового типа //-------------------------------------------------------------\\ el* vvodSp(el **top2) //создание списка { char s[3]={'y','e','s'}; //переменная для хранения ответа на вопрос о продолжении ввода списка el *cur,*pr,*top,*tail,*tail2,*cur2; //указатель clrscr(); *top2=top=tail=tail2=NULL; //обнуление указателей на начало и хвост списков printf("Введите первую запись\n"); while(strcmp(strlwr(s),"no")!=0) //пока ответ не равен no { cur=(el*)malloc(sizeof(el)); //выделяем память под новый элемент (далее текущий) cur->next=NULL; //обнуление указателя на следующий элемент текущего элемента cur->pred=tail; //указатель на предыдущий элемент текущего элемента присваивается хвосту списка if(top==NULL) top=cur; //если указатель на начало списка пуст то указателем на начало списка становится текущий элемент else tail->next=cur; //если нет, то указателем на хвост списка становится текущий элемент tail=cur; //указатель на хвост приравнивается текущему элементу cur2=(el*)malloc(sizeof(el)); //выделяется память под новый элемент второго списка, выполняются те же действия cur2->next=NULL; cur2->pred=tail2; if((*top2)==NULL) (*top2)=cur2; // *top2 это указатель на указатель else tail2->next=cur2; tail2=cur2; printf("Введите фамилию и инициалы автора:\n"); //ввод информационных полей scanf("%s",cur->inf.avt); printf("Введите название книги:\n"); scanf("%s",cur->inf.nazv); printf("Введите год издания книги:\n"); scanf("%d",&cur->inf.god); while(cur->inf.god<0) { printf("Год издания не может быть отрицательным числом! Введите повторно!\n"); //проверяется, положителен ли год scanf("%d",&cur->inf.god); //повторный ввод } printf("Введите количество экземпляров книги:\n"); //аналогичное с количеством scanf("%d",&cur->inf.kol); while(cur->inf.kol<0) { printf("Количество книг не может быть отрицательным числом! Введите повторно!\n"); scanf("%d",&cur->inf.kol); } cur2->inf=cur->inf; //копировние информационных полей элемента первого списка в элемент второго списка cur2->inf.kol=0; //количество выданных книг в начале равно 0 printf("Введете еще одну запись?(для выхода напишите no; для продолжения-yes)\n"); scanf("%s",s); while(strcmp(strlwr(s),"no")!=0&&strcmp(strlwr(s),"yes")!=0) //пока не введён правильный вариант { printf("Вы неверно ввели свой выбор, введите, пожалуйста, его еще раз\n"); scanf("%s",s); //повторный ввод } } return top; //возвращение указателя на начало первого списка } //-----------------------------------------------------\\ void vivodSp(el *cur) //вывод списка { clrscr(); printf("Текущий список:\n"); if(cur==NULL) printf("Перед тем, как выводить список, необходимо его создать!"); else { printf("Фамилия автора\tНазвание книги\tГод издания\tКоличество экземпляров\n"); while(cur!=NULL) //печать списка пока не достигнут конец списка, если количество книг больше нуля (нужно для второго списка) { if(cur->inf.kol>0) printf(" %s\t\t\t%s\t %d\t\t\t %d\n",cur->inf.avt,cur->inf.nazv,cur->inf.god,cur->inf.kol); cur=cur->next; //переход к следующему элементу } } getch(); } //--------------------------------------------------------------\\ void vidacha(el *cur,el *cur2) { char iskA[10],iskN[10]; int n=0; //результат поиска clrscr(); if(cur==NULL) printf("Перед тем, как производить выдачу книг, необходимо создать список!"); else { printf("Введите интересующего Вас автора:\n"); //ввод искомого автора и книги scanf("%s",iskA); printf("Введите интересующую Вас книгу:\n"); scanf("%s",iskN); while(cur!=NULL) //пока не конец списка { if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur->inf.kol>0) //если элемент содержит сведения о нужной книге и есть свободные в наличии { cur->inf.kol--; //уменьшаем количество в первом списке cur2->inf.kol++; //и увеличиваем во втором n++; //поиск успешен printf("Книга выдана на руки!"); break; //конец поиска } else if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur->inf.kol==0) //если свободных нет { printf("Все книги находятся на руках!"); n++; //поиск успешен break; //конец поиска } cur=cur->next; //переход к следующем элементу } if(n==0) printf("Такой книги вообще нет!"); } getch(); } //---------------------------------------------------------------------\\ void dobEl(el *cur, el *cur2) //добавление нового элемента {el *x,*x2; clrscr(); if(cur==NULL) printf("Перед тем, как добавлять элементы в список, необходимо его создать!"); else { while(cur->next!=NULL) cur=cur->next; //поиск конца списка while(cur2->next!=NULL) cur2=cur2->next; //аналогично со вторым x=(el*)malloc(sizeof(el)); //выделение памяти под новый элемент x2=(el*)malloc(sizeof(el)); //аналогичный действия для второго списка printf("Введите данные на новый элемент:\n"); //ввод информационных полей printf("Введите фамилию и инициалы автора:\n"); scanf("%s",x->inf.avt); printf("Введите название книги:\n"); scanf("%s",x->inf.nazv); printf("Введите год издания книги:\n"); scanf("%d",&x->inf.god); while(x->inf.god<0) { printf("Год издания не может быть отрицательным числом! Введите повторно!\n"); scanf("%d",&x->inf.god); } printf("Введите количество экземпляров книги:\n"); scanf("%d",&x->inf.kol); while(x->inf.kol<0) { printf("Количество книг не может быть отрицательным числом! Введите повторно!\n"); scanf("%d",&x->inf.kol); } x2->inf=x->inf; //копирование информационных полей x2->inf.kol=0; //в начале количество выданных книг-0 printf("Новый элемент добавлен!\n"); x->next=NULL; //обнуление указателя на следующий элемент добавляемого элемента cur->next=x; //последний (пока что последний)элемент списка указывает на следующий элемент (добавляемый) x->pred=cur; //указатель на предыдущий элемент нового элемента равен последнему cur=x; //теперь добавленный элемент-последний x2->next=NULL; //аналогично для второго списка cur2->next=x2; x2->pred=cur2; cur2=x2; } } //---------------------------------------------------------------------\\ void delel(el **top,el **top2) //удаление элементов { el *cur=*top,*cur2=*top2; //текущие указатели списков равны указателям на вершины списков int n=0; //результат поиска char isk[20]; //фамилия искомого автора clrscr(); if(cur==NULL) printf("Перед тем, как удалять элементы из списка, создайте его!\n"); else { printf("Введите фамилию автора, книги которого должны быть удалены:\n"); scanf("%s",isk); //ввод фамилии искомого автора(он же удаляемый) while(cur!=NULL) //пока не конец списка { if(strcmp(cur->inf.avt,isk)==0) //если фамилия автора у элемента совпадает с введенной { n++; //поиск успешен if(cur==*top) //если удаляемый элемент-вершина { *top=(*top)->next; //вершиной становится следующий элемент cur->next->pred=NULL; //обнуление указателя новой вершины на предыдущий элемент free(cur); //освобождение памяти под старую вершину *top2=(*top2)->next; //по аналогии для второго cur2->next->pred=NULL; free(cur2); } else if(cur->next==NULL) //если это-последний элемент списка { cur->pred->next=NULL; //ссылка предпоследнего элемента на следующий обнуляется free(cur); //память под старый конец списка освобождается cur2->pred->next=NULL; //аналогично для второго free(cur2); } else { cur->next->pred=cur->pred; //ссылка на следующий элемент у предыдущего элемента (относительно удаляемого) приравнивается следующем элементу cur->pred->next=cur->next; //ссылка на предыдущий элемент у следующего элемента (относительно удаляемого) приравнивается предыдущему элементу free(cur); //память освобождается cur2->next->pred=cur2->pred; //то же для второго cur2->pred->next=cur2->next; free(cur2); } } cur=cur->next; //переход к следующему элементу cur2=cur2->next; //аналогично } printf("Было удалено %d книг данного автора",n); } getch(); } //---------------------------------------------------------------------\\ void vozvrat(el *cur,el *cur2) //возвращение элемента { char iskA[10],iskN[10]; int n=0; clrscr(); if(cur==NULL) printf("Перед тем, как производить поиск в списке, необходимо его создать!"); else { printf("Введите интересующего Вас автора:\n"); scanf("%s",iskA); printf("Введите интересующую Вас книгу:\n"); scanf("%s",iskN); while(cur!=NULL) { if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur2->inf.kol>0) //если есть книги на руках (кол-во>0) { cur->inf.kol++; //увеличивается в первом списке количество cur2->inf.kol--; //уменьшается во втором n++; printf("Книга возвращена!"); break; } else if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur2->inf.kol<=0) //если книг на руках нет { printf("Все свои книги дома! Чужих нам не надо)))"); n++; break; } cur=cur->next; cur2=cur2->next; } if(n==0) printf("К сожалению, ни одной такой книги не найдено!\n"); } getch(); } //---------------------------------------------------------------------\\ void sort(el *top) //сортировка { int k=1; //вспомогательный элемент, показывает были ли перестановки или нет el* cur; //указатель на текущий элемент book dop; //переменная для временного хранения данных (используется при сортировке) clrscr(); if(top==NULL) printf("Перед тем, как сортировать список, необходимо его создать!"); else { while(k!=0) //пока не будет перестановок { k=0; //перстановок нет for(cur=top;cur->next!=NULL;cur=cur->next) //пока указатель на следующий элемент у текущего не равен NULL if(strcmp(cur->inf.avt,cur->next->inf.avt)>0) //если следующий элемент меньше, чем текущий { dop=cur->inf; //занесение в буфер данных текущего элемента cur->inf=cur->next->inf; //переписывание в текущий данные следующего cur->next->inf=dop; //переписывание в следующий данные из буфера k=1; //перестановки есть } } } } //---------------------------------------------------------------------\\ void saveIT(el *cur,el *cur2) //сохранение в файл { FILE *f1,*f2; //файлы f1=fopen("Base.txt","wb"); //файл для первого списка f2=fopen("Out.txt","wb"); //для второго if(f1==NULL||f2==NULL) printf("Чтоё-то не грузится: глюк)"); else { while(cur!=NULL) //пока не конец списка { fwrite(&cur->inf,sizeof(el),1,f1); //запись данных текущего элемента в файл fwrite(&cur2->inf,sizeof(el),1,f2); //то же cur=cur->next; //переход к следующему элементу cur2=cur2->next; //то же } printf("Списки сохранены успешно!"); fcloseall(); //закрытие файлов } getch(); } //---------------------------------------------------------------------\\ void loadIT(el **top,el **top2) //чтение файлов { el *cur,*pr,*tail,*tail2,*cur2; //указатели FILE *f1,*f2; //файлы clrscr(); *top2=*top=tail=tail2=NULL; //обнуление ссылок на хвост и вершину f1=fopen("Base.txt","rb"); //открытие файла Base.txt f2=fopen("Out.txt","rb"); //открытие файла Out.txt if(f1==NULL||f2==NULL) printf("Чтоё-то не грузится: глюк)");//если файлов нет else { while(!feof(f1)) //пока не конец файла { cur=(el*)malloc(sizeof(el)); //выделение памяти под новый элемент (далее текущий) cur->next=NULL; //обнуление указателя на следующий элемент текущего элемента cur->pred=tail; //присваивание указателя на предыдущий элемент текущего элемента хвосту списка if((*top)==NULL) (*top)=cur; //если указатель на начало списка пуст, то указателем на начало списка становится текущий элемент else tail->next=cur; //если нет, то указателем на хвост списка становится текущий элемент tail=cur; //указатель на хвост становится приравнивается текущему элементу cur2=(el*)malloc(sizeof(el)); //аналогично для второго элемента cur2->next=NULL; cur2->pred=tail2; if((*top2)==NULL) (*top2)=cur2; else tail2->next=cur2; tail2=cur2; fread(&cur->inf,sizeof(el),1,f1); //считывание с файла fread(&cur2->inf,sizeof(el),1,f2); } fcloseall(); //закрываем файлы printf("Списки успешно загружены из файлов!"); } getch(); } { int n=0; el *top=NULL,*top2=NULL; while(n!=11) { clrscr(); printf("Введите номер пункта для выполнения:\n"); printf("1.Заполнить список\n"); printf("2.Загрузить списки из файлов\n"); printf("3.Отсортировать текущий список\n"); printf("4.Вывести текущий список\n"); printf("5.Вывести текущий список выданных на руки книг\n"); printf("6.Добавить новый элемент\n"); printf("7.Удалить из списка книги заданного автора\n"); printf("8.Выдать книгу на руки\n"); printf("9.Вернуть книгу в библиотеку\n"); printf("10.Сохранить списки в файл\n"); printf("11.Выход из программы\n"); printf("Ваш выбор:\n"); scanf("%d",&n); while(n>11||n<1) { printf("Такого пункта нет! Введите повторно:\n"); scanf("%d",&n); } if(n==1) top=vvodSp(&top2); else if(n==2) loadIT(&top,&top2); else if(n==3) {sort(top); sort(top2);} else if(n==4) vivodSp(top); else if(n==5) vivodSp(top2); else if(n==6) {dobEl(top,top2); sort(top); sort(top2);} else if(n==7) delel(&top,&top2); else if(n==8) vidacha(top,top2); else if(n==9) vozvrat(top,top2); else if(n==10) saveIT(top,top2); } }
Решение задачи: «Ошибка - expected unqualified-id before '{' token»
textual
Листинг программы
system("cls");
Объяснение кода листинга программы
- Команда
system(
cls)
очищает экран компьютера перед выводом информации.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д