Здравствуйте! Пишу программу "картотека для работников", использую enum при выборе Отдела(программисты менеджеры, доставка) и при выборе Транспорта в отделе доставка(авто,поезд,самолет,корабль). При выборе отдела, программа должна просить пользователя ввести число, соотвественно от 0 до 2, затем сравнивать его с константами в enum и записывать в общую таблицу слово("programmers","managment","shipping"), которую потом можно вывести на экран. Проблема в том,что когда показываю таблицу на экран, все поля заполняются так как нужно,а в поле Department(Отдел) выводи горизонтальные полосы. Пожалуйста,подскажите в чем ошибка. структуры и enum:
| Код | struct PROG { char name [255]; char lastname [255]; int age; enum Department; char Department [50]; union { struct { char Project [255]; char CPU [127]; int Memory; }Programmers; struct { char Project [255]; char Customer [255]; int ProgrammersNum; }Management; struct { char Addres [255]; char Customer [255]; int Weight; char Transport [20]; enum Transport; }Shipping; }; }; struct Value { PROG prog; Value *next; }; enum Department { DEPT_PROGRAMMERS, DEPT_MANAGEMENT, DEPT_SHIPPING }; enum Transport { TRANSP_TRAIN, TRANSP_AUTO, TRANSP_AERO, TRANSP_SHIP }; Value *first = NULL;
|
отрывок из функции добавления записи
| Код | printf("Choose the department:\n '0'-programmers;\n '1'-managment;\n '2'-shipping\n"); scanf("%d",&q); cin.ignore(20,'\n'); if (q==DEPT_PROGRAMMERS) { printf("programmers",&v->prog.Department); printf("\nEnter the project: "); gets(v->prog.Programmers.Project); printf("Enter the CPU: "); gets(v->prog.Programmers.CPU); printf("Enter the memory: "); scanf("%d",&v->prog.Programmers.Memory); cin.ignore(20, '\n'); // Удаляем из буфера ввода все, что там могло остаться после ввода } if (q==DEPT_MANAGEMENT) { printf("management",&v->prog.Department); printf("\nEnter the project: "); gets(v->prog.Management.Project); printf("Enter the customers: "); gets(v->prog.Management.Customer); printf("Enter the numbers of programmers: "); scanf("%d",&v->prog.Management.ProgrammersNum); cin.ignore(20, '\n'); // Удаляем из буфера ввода все, что там могло остаться после ввода } if (q==DEPT_SHIPPING) { printf("shipping",&v->prog.Department); printf("\nEnter the address: "); gets(v->prog.Shipping.Addres); printf("Enter the customers: "); gets(v->prog.Shipping.Customer); printf("Enter the weight: "); scanf("%d",&v->prog.Shipping.Weight); printf("Enter the transport:\n '0' - train;\n '1' - auto;\n '2' - aero;\n '3' - ship\n"); scanf("%d",&q2); if (q2==TRANSP_TRAIN) { printf("train",&v->prog.Shipping.Transport); } if (q2==TRANSP_AUTO) { printf("auto",&v->prog.Shipping.Transport); } if (q2==TRANSP_AERO) { printf("aero",&v->prog.Shipping.Transport); } if (q2==TRANSP_SHIP) { printf("ship",&v->prog.Shipping.Transport); } cin.ignore(20, '\n'); // Удаляем из буфера ввода все, что там могло остаться после ввода }
|
таблица
| Код | printf("# | Name | Lastname | Age |Departm P|| Project | CPU | Memory | \n"); printf(" | | | | M|| Project | Customers| Programmers| \n"); printf(" | | | | S|| Address | Customers| Weight |Transport\n"); printf("---+----------+----------+-------+----------++----------+----------+------------+------------\n");
|
вот так вывожу в таблицу:
| Код | printf("%3d|%10s|%10s|%7d|%10s||%10s|%10s|%10d|%10s| \n",K, v->prog.name,v->prog.lastname,v->prog.age,v->prog.Department, v->prog.Programmers.Project,v->prog.Programmers.CPU,v->prog.Programmers.Memory);
|
И еще вопрос,как написать условие для заполнения полей в таблице: если пользователь выбрал в Department "programmers", то заполнять в таблице поля:Project,CPU,Memory;если выбрал "mamgement, то заполнять другие поля и т.д.?
Модератор: длинные строки кода лучше разбивать на несколько. |