Турбо си выдает ошибку, несколько ошибок с инициализацией переменных - 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; } } }
Решение задачи: «Турбо си выдает ошибку, несколько ошибок с инициализацией переменных»
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; } } }
Объяснение кода листинга программы
- В функции
display_menu
переменнаяresult
объявлена, но не инициализирована. - В функции
iterate_data_file
переменныеfile
иrec
объявлены, но не инициализированы. - В функции
execute_item_1
иexecute_item_2
переменнаяpoint_name
объявлена, но не инициализирована. - В функции
main
переменныеmenu_item_num
иpoint_name
объявлены, но не инициализированы. - В функции
main
при использованииscanf
для ввода названия населенного пункта, ввод не проверяется на успешность. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, файл с данными не проверяется на открытие. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, ввод названия населенного пункта не проверяется на успешность. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, результат выполнения функцииexecute_item_3
не проверяется на успешность. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, после выполнения функцииexecute_item_3
переменнаяpoint_name
не очищается. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, после выполнения функцииexecute_item_3
переменныеroutes_count
не очищаются. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, после выполнения функцииexecute_item_3
не выводится сообщение об успешном выполнении. - В функции
main
при использованииiterate_data_file
для выполнения пунктов меню, после выполнения функцииexecute_item_3
не выводится сообщение об ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д