Синтаксическая ошибка в объявлении функции - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д