Главное хорошо подобрать максимальный размер вводимой инфы + обрезание ( если вдруг больше). В общем смысле можно попробовать использовать спецификаторы вывода для printf(): %-*s - фиксированный размер + фиксация текста по левому краю ( что в большинстве случаев решит проблему смещения информации), если нужны разделители в полях, можно отдельно в каждый массив вставить последний элемент условно "|". Тогда же можно обойтись и без спецификаторов вывода, все строки будут выведены в полном размере.:
'аня.....| ....'
'денис.| ....'
Пример кода:
#include
#include
#define MAX_NAME_LEN 20
#define MAX_SURNAME_LEN 20
struct Employee {
char name[MAX_NAME_LEN];
char surname[MAX_SURNAME_LEN];
char position[30];
int salary;
};
void printTable(struct Employee* employees, int count) {
int name_width = MAX_NAME_LEN;
int surname_width = MAX_SURNAME_LEN;
int position_width = 30;
int salary_width = 10;
printf("%-*s %-*s %-*s %-*s\n",
name_width, "Name",
surname_width, "Last name",
position_width, "post",
salary_width, "salary");
for (int i = 0; i < name_width + surname_width + position_width + salary_width + 3; i++) {
printf("-");
}
printf("\n");
for (int i = 0; i < count; i++) {
printf("%-*s %-*s %-*s %-*d\n",
// print 'имя '
name_width, employees[i].name,
// print 'фамилия '
surname_width, employees[i].surname,
//...
position_width, employees[i].position,
salary_width, employees[i].salary);
}
}
int main() {
struct Employee employees[] = {
{"ANNA111111111111111", "AFQ:WKELQKWELQK", "MANAGAR_1231245", 50000},
{"Dima", "Dmitriev", "Devops", 80000},
{"Oleg", "Timohov", "Designer", 60000}
};
int count = sizeof(employees) / sizeof(employees[0]);
printTable(employees, count);
return 0;
}