Ошибка в программе со структурами - C (СИ)
Формулировка задачи:
#include<stdio.h> #include<conio.h> #include<locale.h> #include <string.h> #include <stdlib.h> struct hospital { char fio[15]; char pol[3]; int year; char city[20]; char diagnoz[100]; }; void show (char *); void add (char *); int main(void) { setlocale(LC_ALL,"Russian"); char file[50]; char menu; puts("Введите имя файла:"); gets(file); do { puts("1.Просмотр файла"); puts("2.Добавление записи"); puts("3.Редактирование файла"); puts("4.Поиск"); puts("5.Выход"); puts("Выберите действие:"); menu=getch(); switch(menu) { case '1':show(file); break; case '2':add(file); break; } }while(menu!='5'); return 0; } struct hospital input_sp(void) { struct hospital sp; int tmp; fflush(stdin); puts("Фамилия:"); gets(sp.fio); puts("Пол:"); gets(sp.pol); puts("Возраст:"); scanf("%d",&tmp); sp.year=tmp; puts("Город:"); gets(sp.city); puts("Диагноз:"); gets(sp.diagnoz); return sp; } void show(char *file) { FILE *f; struct hospital sp; int nom=0; system ("CLS"); if(f=fopen(file, "rb")==NULL) { puts("Ошибка при открытии файла"); } puts ("| N | Фамилия | Пол | Возраст | Город | Диагноз |"); puts ("-------------------------------------------------------------"); while(fread(&sp,sizeof(sp),1,f)==1) printf ("|%3d |%30s |%11s |%5d |%11s |\n", ++nom,sp.fio,sp.pol,sp.year,sp.city,sp.diagnoz); puts ("-------------------------------------------------------------"); getch(); } void add(char *file) { FILE *f; struct hospital sp; system ("CLS"); if(f=fopen(file, "ab")==NULL) { puts("Ошибка при открытии файла"); return ; } sp=input_sp(); fwrite(&sp,sizeof(sp),1,f); fclose (f); }
Решение задачи: «Ошибка в программе со структурами»
textual
Листинг программы
#include<stdio.h> #include<conio.h> #include<locale.h> #include <string.h> #include <stdlib.h> struct hospital { char fio[15]; char pol[3]; int year; char city[20]; char diagnoz[100]; }; void show (char *); void add (char *); int main(void) { char file[50]; char menu; setlocale(LC_ALL,"Russian"); puts("Введите имя файла:"); gets(file); do { puts("1.Просмотр файла"); puts("2.Добавление записи"); puts("3.Редактирование файла"); puts("4.Поиск"); puts("5.Выход"); puts("Выберите действие:"); menu=getch(); switch(menu) { case '1':show(file); break; case '2':add(file); break; } }while(menu!='5'); return 0; } struct hospital input_sp(void) { struct hospital sp; int tmp; fflush(stdin); puts("Фамилия:"); gets(sp.fio); puts("Пол:"); gets(sp.pol); puts("Возраст:"); scanf("%d",&tmp); sp.year=tmp; puts("Город:"); gets(sp.city); puts("Диагноз:"); gets(sp.diagnoz); return sp; } void show(char *file) { FILE *f; struct hospital sp; int nom=0; system ("CLS"); if(f=fopen(file, "rb")==NULL) { puts("Ошибка при открытии файла"); } puts ("| N | Фамилия | Пол | Возраст | Город | Диагноз |"); puts ("-------------------------------------------------------------"); while(fread(&sp,sizeof(sp),1,f)==1) printf ("|%3d |%30s |%11s |%5d |%11s |\n", ++nom,sp.fio,sp.pol,sp.year,sp.city,sp.diagnoz); puts ("-------------------------------------------------------------"); getch(); } void add(char *file) { FILE *f; struct hospital sp; system ("CLS"); if(f=fopen(file, "ab")==NULL) { puts("Ошибка при открытии файла"); return ; } sp=input_sp(); fwrite(&sp,sizeof(sp),1,f); fclose (f); }
Объяснение кода листинга программы
- Структура
hospital
содержит поляfio
(ФИО),pol
(пол),year
(год рождения),city
(город) иdiagnoz
(диагноз). - В функции
main
пользователь вводит имя файла, затем выбирает действие из меню: просмотр файла (1), добавление записи (2), редактирование файла (3), поиск (4) или выход (5). - В функции
input_sp
происходит ввод данных о пациенте: фамилия, пол, возраст, город и диагноз. Возраст вводится с помощьюscanf
, чтобы избежать переполнения буфера. - Функция
show
открывает файл с помощьюfopen
и считывает данные о пациентах построчно с помощьюfread
. Затем выводит данные в формате таблицы с помощьюprintf
. - Функция
add
открывает файл с помощьюfopen
и добавляет данные о новом пациенте в конец файла с помощьюfwrite
. Затем закрывает файл с помощьюfclose
. - В функции
main
после выполнения действия, выбранного пользователем, программа возвращается в начало цикла и предлагает пользователю выбрать новое действие. - Если пользователь выбирает выход (5), программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д