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

Объяснение кода листинга программы

  1. В функции Add происходит выделение памяти под новый элемент списка с использованием функции malloc.
  2. В функции Delete происходит обход списка до нахождения элемента, который нужно удалить. Если элемент найден, он удаляется с помощью функции free.
  3. В функции Print происходит обход списка и вывод информации о каждом его элементе на экран.
  4. В функции Clear происходит обход списка и освобождение памяти под каждым его элементом с использованием функции free.
  5. В функции Menu происходит вывод на экран меню программы и ожидание выбора пользователя.
  6. В функции main происходит инициализация списка, ввод данных от пользователя и обработка его выбора с помощью условного оператора switch.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5