Синтаксическая ошибка в объявлении функции - C (СИ)
Формулировка задачи:
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <locale.h>
- #include <Windows.h>
- struct Student
- {
- char fullname[50], group[10];
- float gpa;
- struct Student *next;
- };
- void Add(struct Student **first, char fullname[50], char group[10], float gpa)
- {
- struct Student *newelem = (struct Student*)malloc(sizeof(struct Student));
- strcpy(newelem->fullname, fullname);
- strcpy(newelem->group, group);
- newelem->gpa = gpa;
- newelem->next = *first;
- *first = newelem;
- }
- bool Delete(struct Student **first, char fullname[50])
- {
- struct Student *cur, *prev, *tmp;
- for (cur = *first, prev = NULL; cur != NULL; prev = cur, cur = cur->next)
- if (strcmp(cur->fullname, fullname) == 0)
- {
- if (cur == *first)
- *first = cur->next;
- else
- prev->next = cur->next;
- free(cur);
- return true;
- }
- return false;
- }
- void Print(struct Student *first)
- {
- struct Student *cur;
- for (cur = first; cur != NULL; cur = cur->next)
- printf("%30s%10s%10.2f\n", cur->fullname, cur->group, cur->gpa);
- }
- void Clear(struct Student **first)
- {
- struct Student *tmp;
- while (*first != NULL)
- {
- tmp = *first;
- *first = (*first)->next;
- free(tmp);
- }
- }
- int Menu()
- {
- int choice;
- setlocale(LC_ALL, "rus");
- system("cls");
- printf("1 - Вывести список на экран\n");
- printf("2 - Добавить новый элемент\n");
- printf("3 - Удалить элемент\n");
- printf("0 - Выйти из программы\n");
- printf("Ваш выбор: ");
- scanf("%i", &choice);
- return choice;
- }
- void main()
- {
- struct Student *first;
- char fullname[50], group[10], kod2[10];
- float gpa;
- first = NULL;
- while (1)
- {
- switch (Menu())
- {
- case 0: Clear(&first); return;
- case 1: Print(first); break;
- case 2:
- printf("FIO: ");
- fflush(stdin);
- gets(fullname);
- printf("Gruppa: ");
- fflush(stdin);
- gets(group);
- printf("Srednii ball: ");
- scanf("%f", &gpa);
- Add(&first, fullname, group, gpa);
- printf("Student dobavlen v spisok!\n");
- break;
- case 3:
- printf("Vvedite FIO studenta: ");
- fflush(stdin);
- gets(fullname);
- if (Delete(&first, fullname))
- printf("Student udalen iz spiska!\n");
- else
- printf("Net takogo studenta!\n");
- break;
- }
- system("pause");
- }
- }
Листинг программы
- 1>------ Построение начато: проект: Work2, Конфигурация: Debug Win32 ------
- 1> main.c
- 1>d:\c++\work2\work2\main.c(16): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
- 1> d:\programs\express 2010\vc\include\string.h(105): см. объявление "strcpy"
- 1>d:\c++\work2\work2\main.c(17): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
- 1> d:\programs\express 2010\vc\include\string.h(105): см. объявление "strcpy"
- 1>d:\c++\work2\work2\main.c(23): error C2061: синтаксическая ошибка: идентификатор "Delete"
- 1>d:\c++\work2\work2\main.c(23): error C2059: синтаксическая ошибка: ;
- 1>d:\c++\work2\work2\main.c(23): error C2059: синтаксическая ошибка: тип
- 1>d:\c++\work2\work2\main.c(100): warning C4013: Delete: нет определения; предполагается "extern" с возвратом типа "int"
- ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Теперь еще и true не распознает))
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- struct Student
- {
- char fullname[50], group[10];
- float gpa;
- struct Student *next;
- };
- void Add(struct Student **first, char fullname[50], char group[10], float gpa)
- {
- struct Student *newelem = (struct Student*)malloc(sizeof(struct Student));
- strcpy(newelem->fullname, fullname);
- strcpy(newelem->group, group);
- newelem->gpa = gpa;
- newelem->next = *first;
- *first = newelem;
- }
- bool Delete(struct Student **first, char fullname[50])
- {
- struct Student *cur, *prev, *tmp;
- for (cur = *first, prev = NULL; cur != NULL; prev = cur, cur = cur->next)
- if (strcmp(cur->fullname, fullname) == 0)
- {
- if (cur == *first)
- *first = cur->next;
- else
- prev->next = cur->next;
- free(cur);
- return true;
- }
- return false;
- }
- void Print(struct Student *first)
- {
- struct Student *cur;
- for (cur = first; cur != NULL; cur = cur->next)
- printf("%30s%10s%10.2f\n", cur->fullname, cur->group, cur->gpa);
- }
- void Clear(struct Student **first)
- {
- struct Student *tmp;
- while (*first != NULL)
- {
- tmp = *first;
- *first = (*first)->next;
- free(tmp);
- }
- }
- int Menu()
- {
- int choice;
- system("cls");
- printf("1 - Vyvesti spisok na ekran\n");
- printf("2 - Dobaviti novogo studenta\n");
- printf("3 - Udaliti studenta iz spiska\n");
- printf("0 - Vyiti iz programmy\n");
- printf("Vash vybor: ");
- scanf("%i", &choice);
- return choice;
- }
- void main()
- {
- struct Student *first;
- char fullname[50], group[10], kod2[10];
- float gpa;
- first = NULL;
- while (true)
- {
- switch (Menu())
- {
- case 0: Clear(&first); return;
- case 1: Print(first); break;
- case 2:
- printf("FIO: ");
- fflush(stdin);
- gets(fullname);
- printf("Gruppa: ");
- fflush(stdin);
- gets(group);
- printf("Srednii ball: ");
- scanf("%f", &gpa);
- Add(&first, fullname, group, gpa);
- printf("Student dobavlen v spisok!\n");
- break;
- case 3:
- printf("Vvedite FIO studenta: ");
- fflush(stdin);
- gets(fullname);
- if (Delete(&first, fullname))
- printf("Student udalen iz spiska!\n");
- else
- printf("Net takogo studenta!\n");
- break;
- }
- system("pause");
- }
- }
Листинг программы
- 1>------ Построение начато: проект: Work2, Конфигурация: Debug Win32 ------
- 1> main.c
- 1>d:\c++\work2\work2\main.c(15): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
- 1> d:\programs\express 2010\vc\include\string.h(105): см. объявление "strcpy"
- 1>d:\c++\work2\work2\main.c(16): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
- 1> d:\programs\express 2010\vc\include\string.h(105): см. объявление "strcpy"
- 1>d:\c++\work2\work2\main.c(22): error C2061: синтаксическая ошибка: идентификатор "Delete"
- 1>d:\c++\work2\work2\main.c(22): error C2059: синтаксическая ошибка: ;
- 1>d:\c++\work2\work2\main.c(22): error C2059: синтаксическая ошибка: тип
- 1>d:\c++\work2\work2\main.c(76): error C2065: true: необъявленный идентификатор
- 1>d:\c++\work2\work2\main.c(98): warning C4013: Delete: нет определения; предполагается "extern" с возвратом типа "int"
- ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Решение задачи: «Синтаксическая ошибка в объявлении функции»
textual
Листинг программы
- #include <cstdio>
- #include <cstring>
- #include <clocale>
- #include <windows.h>
- struct Student
- {
- char fullname[50], group[10];
- float gpa;
- struct Student *next;
- };
- void Add(struct Student **first, char fullname[50], char group[10], float gpa)
- {
- struct Student *newelem = (struct Student*)malloc(sizeof(struct Student));
- strcpy(newelem->fullname, fullname);
- strcpy(newelem->group, group);
- newelem->gpa = gpa;
- newelem->next = *first;
- *first = newelem;
- }
- bool Delete(struct Student **first, char fullname[50])
- {
- struct Student *cur, *prev, *tmp;
- for (cur = *first, prev = NULL; cur != NULL; prev = cur, cur = cur->next)
- if (strcmp(cur->fullname, fullname) == 0)
- {
- if (cur == *first)
- *first = cur->next;
- else
- prev->next = cur->next;
- free(cur);
- return true;
- }
- return false;
- }
- void Print(struct Student *first)
- {
- struct Student *cur;
- for (cur = first; cur != NULL; cur = cur->next)
- printf("%30s%10s%10.2f\n", cur->fullname, cur->group, cur->gpa);
- }
- void Clear(struct Student **first)
- {
- struct Student *tmp;
- while (*first != NULL)
- {
- tmp = *first;
- *first = (*first)->next;
- free(tmp);
- }
- }
- int Menu()
- {
- int choice;
- setlocale(LC_ALL, "rus");
- system("cls");
- printf("1 - Вывести список на экран\n");
- printf("2 - Добавить новый элемент\n");
- printf("3 - Удалить элемент\n");
- printf("0 - Выйти из программы\n");
- printf("Ваш выбор: ");
- scanf("%i", &choice);
- return choice;
- }
- int main()
- {
- system("chcp 1251");
- struct Student *first;
- char fullname[50], group[10], kod2[10];
- float gpa;
- first = NULL;
- bool isExit = false;
- while (!isExit)
- {
- switch (Menu())
- {
- case 0: Clear(&first); isExit = true;
- case 1: Print(first); break;
- case 2:
- printf("FIO: ");
- fflush(stdin);
- gets(fullname);
- printf("Gruppa: ");
- fflush(stdin);
- gets(group);
- printf("Srednii ball: ");
- scanf("%f", &gpa);
- Add(&first, fullname, group, gpa);
- printf("Student dobavlen v spisok!\n");
- break;
- case 3:
- printf("Vvedite FIO studenta: ");
- fflush(stdin);
- gets(fullname);
- if (Delete(&first, fullname))
- printf("Student udalen iz spiska!\n");
- else
- printf("Net takogo studenta!\n");
- break;
- }
- system("pause");
- }
- }
Объяснение кода листинга программы
- В функции
Add
происходит выделение памяти под новый элемент списка с использованием функцииmalloc
. - В функции
Delete
происходит обход списка до нахождения элемента, который нужно удалить. Если элемент найден, он удаляется с помощью функцииfree
. - В функции
Print
происходит обход списка и вывод информации о каждом его элементе на экран. - В функции
Clear
происходит обход списка и освобождение памяти под каждым его элементом с использованием функцииfree
. - В функции
Menu
происходит вывод на экран меню программы и ожидание выбора пользователя. - В функции
main
происходит инициализация списка, ввод данных от пользователя и обработка его выбора с помощью условного оператораswitch
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д