Турбо си выдает ошибку, несколько ошибок с инициализацией переменных - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#define AUTOBUS ((char)"а")
#define TRAMWAY ((char)"т")
#define TAXI ((char)"м")
 
#include <stdio.h>
#include <string.h>
 
typedef struct {
    int route_number;
    char transport_type;
    char* start_point_name;
    char* end_point_name;
    struct {
    int hours;
    int minutes;
    } route_time;
} file_rec;
 
char* menu_items[] = {
    "Список всех маршрутов от/до пункта А",
    "Номер самого длинного маршрута от/до пункта А",
    "Количество маршрутов каждого вида транспорта, следующих от/до пункта А",
    "Выход из программы"
};
char* point_name;
int longest_route_num = 0;
int longest_route_time = 0;
int routes_count[3];
 
int display_menu(void) {
    int result, i;
 
    while(1) {
    printf("Выберите поисковый запрос\n");
 
    for(i = 0; i < 4; i++)
        printf("\t%i. %s\n", i + 1, menu_items[i]);
 
    printf("Введите номер нужного пункта меню\n");
    scanf("%i", &result);
 
    if(result >= 1 && result <= 4)
        return result;
    else
        printf("Неверный номер запроса. Номер должен иметь значение от 1 до 3\n");
    }
}
 
void iterate_data_file(void(*func)(file_rec*)) {
    FILE* file = fopen("datafile.dat", "r");
    file_rec rec;
 
    if(file) {
    while(!feof(file)) {
        fscanf(file, "%i %c %s %s %i %i",
        &rec.route_number,
        &rec.transport_type,
        rec.start_point_name,
        rec.end_point_name,
        &rec.route_time.hours,
        &rec.route_time.minutes);
 
        func(&rec);
    }
 
    fclose(file);
    } else
    printf("Файл с данными (datafile.dat) не найден\n");
}
 
void execute_item_1(file_rec* rec) {
    if(strcmp(rec->start_point_name, point_name) == 0 || strcmp(rec->end_point_name, point_name))
    printf("Маршрут %i(%c) следует из %s в %s, время в пути %i ч, %i мин\n",
        rec->route_number,
        rec->transport_type,
        rec->start_point_name,
        rec->end_point_name,
        rec->route_time.hours,
        rec->route_time.minutes);
}
 
void execute_item_2(file_rec* rec) {
    if((strcmp(rec->start_point_name, point_name) == 0 || strcmp(rec->end_point_name, point_name)) &&
    rec->route_time.hours * 60 + rec->route_time.minutes > longest_route_time) {
    longest_route_num = rec->route_number;
    longest_route_time = rec->route_time.hours * 60 + rec->route_time.minutes;
    }
}
 
void execute_item_3(file_rec* rec) {
    if(strcmp(rec->start_point_name, point_name) == 0 || strcmp(rec->end_point_name, point_name)) {
    switch(rec->transport_type) {
    case AUTOBUS:
        routes_count[0]++;
        break;
 
    case TRAMWAY:
        routes_count[1]++;
        break;
 
    case TAXI:
        routes_count[2]++;
    }
    }
}
 
int main(int agrc, char** argv) {
    int menu_item_num;
 
    while(1) {
    menu_item_num = display_menu();
 
    printf("Выполняем пункт %i - %s\n", menu_item_num, menu_items[menu_item_num - 1]);
 
    if(menu_item_num < 4) {
        printf("Введите название населенного пункта ");
        scanf("%s", point_name);
    }
 
    switch(menu_item_num) {
    case 1:
        iterate_data_file(execute_item_1);
        break;
 
    case 2:
        longest_route_num = longest_route_time = 0;
        iterate_data_file(execute_item_2);
        break;
 
    case 3:
        memset(&routes_count, 3, sizeof(int));
        iterate_data_file(&execute_item_3);
 
        printf("Число маршрутов автобусов - %i\n", routes_count[0]);
        printf("Число маршрутов трамваев - %i\n", routes_count[1]);
        printf("Число маршрутов такси - %i\n", routes_count[2]);
        break;
 
    case 4: return 0;
    }
    }
}
Программа должна быть рабочая для С, но выскакивает 12 ошибок. Директории библиотек прописаны вроде правильно и в чем ошибка я не понимаю, помогите пожалуйста

Решение задачи: «Турбо си выдает ошибку, несколько ошибок с инициализацией переменных»

textual
Листинг программы
#define AUTOBUS 'а'
#define TRAMWAY 'т'
#define TAXI 'м'
 
#include <stdio.h>
#include <string.h>
 
typedef struct {
    int route_number;
    char transport_type;
    char* start_point_name;
    char* end_point_name;
    struct {
    int hours;
    int minutes;
    } route_time;
} file_rec;
 
char* menu_items[] = {
    "Список всех маршрутов от/до пункта А",
    "Номер самого длинного маршрута от/до пункта А",
    "Количество маршрутов каждого вида транспорта, следующих от/до пункта А",
    "Выход из программы"
};
char* point_name;
int longest_route_num = 0;
int longest_route_time = 0;
int routes_count[3];
 
int display_menu(void) {
    int result, i;
 
    while(1) {
    printf("Выберите поисковый запрос\n");
 
    for(i = 0; i < 4; i++)
        printf("\t%i. %s\n", i + 1, menu_items[i]);
 
    printf("Введите номер нужного пункта меню\n");
    scanf("%i", &result);
 
    if(result >= 1 && result <= 4)
        return result;
    else
        printf("Неверный номер запроса. Номер должен иметь значение от 1 до 3\n");
    }
}
 
void iterate_data_file(void(*func)(file_rec*)) {
    FILE* file = fopen("datafile.dat", "r");                  //вот в этом месте 2 ошибки: Undefined symbol 'FILE'  
                                                                       //и Undefined symbol 'file'    
    file_rec rec;                                                   // в этой строчке пишет Declaration is not allowed   
                                                                       // here
 
    if(file) {
    while(!feof(file)) {
        fscanf(file, "%i %c %s %s %i %i",
        &rec.route_number,
        &rec.transport_type,
        rec.start_point_name,
        rec.end_point_name,
        &rec.route_time.hours,
        &rec.route_time.minutes);
 
        func(&rec);
    }
 
    fclose(file);
    } else
    printf("Файл с данными (datafile.dat) не найден\n");
}
 
void execute_item_1(file_rec* rec) {
    if(strcmp(rec->start_point_name, point_name) == 0 || strcmp(rec->end_point_name, point_name))
    printf("Маршрут %i(%c) следует из %s в %s, время в пути %i ч, %i мин\n",
        rec->route_number,
        rec->transport_type,
        rec->start_point_name,
        rec->end_point_name,
        rec->route_time.hours,
        rec->route_time.minutes);
}
 
void execute_item_2(file_rec* rec) {
    if((strcmp(rec->start_point_name, point_name) == 0 || strcmp(rec->end_point_name, point_name)) &&
    rec->route_time.hours * 60 + rec->route_time.minutes > longest_route_time) {
    longest_route_num = rec->route_number;
    longest_route_time = rec->route_time.hours * 60 + rec->route_time.minutes;
    }
}
 
void execute_item_3(file_rec* rec) {
    if(strcmp(rec->start_point_name, point_name) == 0 || strcmp(rec->end_point_name, point_name)) {
    switch(rec->transport_type) {
    case AUTOBUS:
        routes_count[0]++;
        break;
 
    case TRAMWAY:
        routes_count[1]++;
        break;
 
    case TAXI:
        routes_count[2]++;
    }
    }
}
 
int main(int agrc, char** argv) {
    int menu_item_num;
 
    while(1) {
    menu_item_num = display_menu();
 
    printf("Выполняем пункт %i - %s\n", menu_item_num, menu_items[menu_item_num - 1]);
 
    if(menu_item_num < 4) {
        printf("Введите название населенного пункта ");
        scanf("%s", point_name);
    }
 
    switch(menu_item_num) {
    case 1:
        iterate_data_file(execute_item_1);
        break;
 
    case 2:
        longest_route_num = longest_route_time = 0;
        iterate_data_file(execute_item_2);
        break;
 
    case 3:
        memset(&routes_count, 3, sizeof(int));
        iterate_data_file(&execute_item_3);
 
        printf("Число маршрутов автобусов - %i\n", routes_count[0]);
        printf("Число маршрутов трамваев - %i\n", routes_count[1]);
        printf("Число маршрутов такси - %i\n", routes_count[2]);
        break;
 
    case 4: return 0;
    }
    }
}

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

  1. В функции display_menu переменная result объявлена, но не инициализирована.
  2. В функции iterate_data_file переменные file и rec объявлены, но не инициализированы.
  3. В функции execute_item_1 и execute_item_2 переменная point_name объявлена, но не инициализирована.
  4. В функции main переменные menu_item_num и point_name объявлены, но не инициализированы.
  5. В функции main при использовании scanf для ввода названия населенного пункта, ввод не проверяется на успешность.
  6. В функции main при использовании iterate_data_file для выполнения пунктов меню, файл с данными не проверяется на открытие.
  7. В функции main при использовании iterate_data_file для выполнения пунктов меню, ввод названия населенного пункта не проверяется на успешность.
  8. В функции main при использовании iterate_data_file для выполнения пунктов меню, результат выполнения функции execute_item_3 не проверяется на успешность.
  9. В функции main при использовании iterate_data_file для выполнения пунктов меню, после выполнения функции execute_item_3 переменная point_name не очищается.
  10. В функции main при использовании iterate_data_file для выполнения пунктов меню, после выполнения функции execute_item_3 переменные routes_count не очищаются.
  11. В функции main при использовании iterate_data_file для выполнения пунктов меню, после выполнения функции execute_item_3 не выводится сообщение об успешном выполнении.
  12. В функции main при использовании iterate_data_file для выполнения пунктов меню, после выполнения функции execute_item_3 не выводится сообщение об ошибке.

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


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

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

15   голосов , оценка 3.733 из 5
Похожие ответы