Задать вопрос
  • Как организовать корректный вывод информации в виде таблицы средствами си/си++(ООП использовать нельзя), если длина вводимых слов разная?

    @Vadim_Student
    Главное хорошо подобрать максимальный размер вводимой инфы + обрезание ( если вдруг больше). В общем смысле можно попробовать использовать спецификаторы вывода для 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;
    }
    Ответ написан
    Комментировать