Синтаксическая ошибка в объявлении функции - 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.