Как вывести структуру в виде таблицы на СИ?

возникла такая проблема- пытался вывести структуру в виде таблицы, но почему-то не получается.
#include "stdafx.h" #include "stdio.h" #include"Windows.h" #include "locale.h" typedef struct < int year; int ussr; int usa; int eng; int fran; >row; row table[5]; #pragma warning (disable : 4996) int _tmain(int argc, _TCHAR* argv[]) < setlocale(LC_ALL, ""); char *nazva[] = < " Годы ", " СССР ", " США ", " Англия ", " Франция " >; printf("Введите данные: "); for (int i = 0; i for (int i = 0; i system("pause"); return 0; >

Вот собственно говоря код этого чуда, не судите строго, я еще толком не разобрался, что тут да как. Не могу понять как сделать хотя бы приблизительно такой вид у таблицы
Отслеживать
Drunk Withcher
задан 25 ноя 2020 в 17:38
Drunk Withcher Drunk Withcher
21 1 1 серебряный знак 5 5 бронзовых знаков
Задайте ширину для полей вывода. printf(«%10s «, nazva[i]); и так всем. 10 для примера. Можете указать другое значение.
– user361068
25 ноя 2020 в 17:45
Попробовал, стало лучше, но все равно не так как нужно
25 ноя 2020 в 17:53
Что, прям с рамкой?
– user361068
25 ноя 2020 в 17:57
Без рамки, главное чтобы она была такого вида
25 ноя 2020 в 17:59
Шапку (это у вас массив nazva[] ) и строки печатайте в разных циклах.
25 ноя 2020 в 18:00
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
// Здесь, кстати, нужен const const char *nazva[5] = < "Годы", "СССР", "США", "Англия", "Франция" >; // Здесь ввод данных // Выводим шапку таблицы // 5 потому что в nazva лежат 5 строк for (int i = 0; i < 5; i++) < printf("%10s ", nazva[i]); >// Переход на следующую строку printf("\n"); // Выводим данные из массива // ArrSize - количество выводимых структур for (int i = 0; i
Отслеживать
ответ дан 25 ноя 2020 в 18:17
user361068 user361068
помогла константа, но почему-то вывод строк не такой, то есть первый вводимый пользователем элемент(год) выводится в строчку, как и все остальное
25 ноя 2020 в 18:25
Вы вводите сначала года чтоли?
– user361068
25 ноя 2020 в 18:28
вначале вывожу константу, года и все остальное вывожу последовательно
25 ноя 2020 в 18:44
Вы вводите с клавиатуры числа по очереди так: 1928 120 137 94 105 или так: 1928 1940 1950 1955 120?
– user361068
25 ноя 2020 в 18:50
да, сканирую вначале все года, затем данные сср,сша, англии и франции
25 ноя 2020 в 19:06
Cпасибо всем кто пытался помочь в решении моей проблемы. Я его все-таки нашел:
#include "stdafx.h" #include "stdio.h" #include"Windows.h" #include "locale.h" typedef struct < int year, ssr, usa, ang, franz; >dannie; dannie d[5]; #pragma warning (disable : 4996) int _tmain(int argc, _TCHAR* argv) ; int i = 0; printf("Введите года: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].year); >printf("Введите данные СССР: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].ssr); >printf("Введите данные США: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].usa); >printf("Введите данные Англии: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].ang); >printf("Введите данные Франции: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].franz); >for (i=0;i <5;i++) < printf("%s\t", nazva[i]); >printf("\n"); for (i=0;i <5;i++) < printf("%4d\t", d[i].year); printf("%4d\t", d[i].ssr); printf("%3d\t", d[i].usa); printf("%6d\t", d[i].ang); printf("%7d\t", d[i].franz); printf("\n"); >printf("\n Производится расчет производительности труда. \n"); float tempra=0, temprf=0; float rascheta, raschetf; for (int i = 0; i < 5; i++) < printf("Год:%d, Англия:%d, Франция:%d\n", d[i].year, d[i].ang, d[i].franz); rascheta =(float) d[i+1].ang / d[i].year * 100; raschetf =(float) d[i].franz / d[i].year * 100; if (rascheta >tempra) < tempra = rascheta; printf("Прирост за %d год составляет(Англия): %f\n", d[i].year, tempra); >else < printf("Прироста за %d год не было(Англия)\n", d[i].year); >if (raschetf > temprf) < temprf = raschetf; printf("Прирост за %d год составляет(Франция): %f\n", d[i].year, temprf); >else < printf("Прироста за %d год не было(Франция)\n", d[i].year); >> float raznica; raznica = temprf - tempra; if (raznica < 0) < -raznica; >printf("Разница: %f\n", raznica); printf("Введите процент роста: "); float P; float tempu; int y[5]; scanf("%f", &P); if (P <=0) < printf("Отрицательного процента роста не бывает\n"); >else < for (i=0; i<5;i++) < tempu = d[i + 1].usa / d[i].usa * 100; if (tempu<=P) < printf("В %d году не превышало\n", d[i].year); >> > system("pause"); return 0; >
Эта работа уже с дополнениями, но суть вывода таблицы заключается в следующем- мы должны спросить каждый элемент таблицы у пользователя в отдельности и занести это в массив структур, как это и было в старой версии, но при этом запоминать не строкой, а переменной массива структур, после чего поэлементно вывести вначале названия таблицы через цикл for, а затем вывести через этот цикл все данные, главное это указать сколько места они будут занимать(К примеру, Года, 4 буквы, то есть когда выводим таблицу вначале выводим заголовок, а после этого тоже в цикле for printf(«%4d», d[i].year); но цикл этим не заканчивается, продолжаем так для всех данных, а затем в конце с новой строки, иначе все данные пойдут строчкой). Еще раз хочу всем сказать огромное спасибо, без вашей помощи я бы не справился)))
Как вывести данные в виде таблицы c
Регистрация: 12.12.2019
Сообщений: 3
Вывод массива структур на экран в виде таблицы
Хранение данных необходимо организовать в виде массива
структур. В программе должны быть реализованы следующие функции:
1) Создание новой записи;
2) Вывод массива структур на экран в виде таблицы;
3) Поиск записи по параметру;
4) Удаление записи из массива;
5) Сортировка массива структур с некоторым параметром некоторым параметром
мой код( не роботает, когда вожу уже «nationality» вылетает.
#include #include #include using namespace std; struct person < char* fio; char sex[13]; char nationality[25]; int height; int weight; struct person_date_of_birth < int year; int month; int number; >; person_date_of_birth pdob; int phone_number; struct person_home_adres < int zip_code; char country[20]; char region[20]; char district[20]; char city[20]; char street[20]; int house; int apartment; >; person_home_adres pha; >; void Input(person per[], int n) < for (int i = 0; i < n; i++) < printf("Людина : %d\n", i + 1); printf("Ведіть ФІО людини:"); per[i].fio = new char[55]; cin.get(); cin.getline(per[i].fio, 55); printf("Ведіть стать людини:"); scanf_s("%s\n", per[i].sex); printf("Ведіть національність людини:"); scanf_s("%s\n", per[i].nationality); printf("Ведіть ріст людини:"); scanf_s("%d\n", &per[i].height); printf("Ведіть вагу людини:"); scanf_s("%d\n", &per[i].weight); void Input(person::person_date_of_birth pdob[], int n); printf("Ведіть номер телефону людини:"); scanf_s("%d\n", &per[i].phone_number); void Input(person::person_home_adres pha[], int n); printf("\n"); >> void Input(person::person_date_of_birth pdob[], int n) < for (int i = 0; i < n; i++) < printf("Ведіть рік народження людини:"); scanf_s("%d\n", &pdob[i].year); printf("Ведіть місяць народження людини:"); scanf_s("%d\n", &pdob[i].month); printf("Ведіть число народження людини:"); scanf_s("%d\n", &pdob[i].number); >> void Input(person::person_home_adres pha[], int n) < for (int i = 0; i < n; i++) < printf("Ведіть zip code людини:"); scanf_s("%d\n", &pha[i].zip_code); printf("Ведіть країну людини:"); scanf_s("%s\n", pha[i].country); printf("Ведіть регіон людини:"); scanf_s("%s\n", pha[i].region); printf("Ведіть район людини:"); scanf_s("%s\n", pha[i].district); printf("Ведіть місто людини:"); scanf_s("%s\n", pha[i].city); printf("Ведіть вулицю людини:"); scanf_s("%s\n", pha[i].street); printf("Ведіть будинок людини:"); scanf_s("%d\n", &pha[i].house); printf("Ведіть квартиру людини:"); scanf_s("%d\n", &pha[i].apartment); >> void Output(person per[], int n) < printf("ПІП\tСтать\tНаціональність\tРіст\t\Вага\tДата народження\tНомер телефону\tДомашній адрес\t"); for (int i = 0; i < n; i++) < printf("%c\t%c\t%c\t%d\t%d\t%d\t%d:%d:%d\t%d\t%d%:c%:c%:c%:c%:c%:%d:%d\t", per[i].fio, per[i].sex, per[i].nationality, per[i].height, per[i].weight, per[i].pdob.year, per[i].pdob.month, per[i].pdob.number, per[i].pha.zip_code, per[i].pha.country, per[i].pha.region, per[i].pha.district, per[i].pha.city, per[i].pha.street, per[i].pha.house, per[i].pha.apartment); >> void Free(person per[], int n) < for (int i = 0; i < n; i++) < delete[] per[i].fio; >> int main() < SetConsoleCP(1251); SetConsoleOutputCP(1251); const int n = 10; person mas[n]; int selection; do < printf("\n"); printf("Виберіть потрібну функцію:\n"); printf("1 - Створення нового запису\n"); printf("2 - Виведення масиву структур на екран у вигляді таблиці\n"); printf("3 - Пошук запису за параметром\n"); printf("4 - Видалення запису із масиву\n"); printf("5 - Сортування масиву структур за деяким параметром\n"); printf("0 - Вихід\n"); scanf_s("%d", &selection); switch (selection) < case 1:Input(mas, n); break; case 2:Output(mas, n); break; case 3:(mas, n); break; case 4:(mas, n); break; case 5:(mas, n); break; case 0:Free(mas, n); break; default:printf("Такой функции нет\n"); >> while (selection != 0); system("pause"); >
Как вывести данные в виде таблицы — верстка товарной сетки
Статья состоит из теоретической и практической частей.
В первой части вспомним, как таблицы создаются в HTMl, как работает вывод коллекций с помощью цикла и как разбить коллекцию на строки, чтобы вывести ее в виде таблицы.
Во второй части — примеры. Можете перейти сразу к ней и скопировать верстку подходящей таблицы.
Теоретическая часть
Как это работает в HTML
В HTML для создания таблицы используются теги:
Например, следующая верстка:
1 2 3 4 5 6 7 8 9

Создает таблицу вида:
Для удобства восприятия ячейки здесь и в остальных примерах отделили друг от друга границей.
Как вывести коллекцию
Принцип работы с коллекциями заключается в том, что мы не записываем код отдельно для каждого его элемента (как в примере выше). Вместо этого мы используем цикл for. Внутри него записываем код, который применяется столько раз, сколько элементов в коллекции.
Например, для вывода названий всех продуктов из коллекции Products.GetBySegment(«Novinki»).Take(6) напишем:
@ Название: $ @
Данные при этом выводятся в одну строку.
Добавление переноса строки (
) после названия выведет все продукты друг под другом.
Решение — найти способ проходиться циклом по строкам таблицы.
Как разбить коллекцию на строки и ячейки
Используем функцию TableRows .
Она группирует параметр-коллекцию в строки по N элементов. После этого можно вывести строки и колонки таблицы при помощи циклов.
TableRows принимает два параметра:
- список объектов (параметр-коллекцию);
- число столбцов в таблице.
TableRows возвращает коллекцию строк таблицы. У каждой строки есть поля:
- Index — номер строки в таблице (начиная с 1).
- IsFirst — является ли строка первой.
- IsLast — является ли строка последней.
- ValueCount — сколько в строке ячеек, у которых значение не пустое.
Например, если попытаться разместить список из 8 позиций в виде таблицы с 5 колонками, в первой строке ValueCount будет равен 5, а во второй — 3, потому что во второй строке часть ячеек не будут содержать значения. - Cells — коллекция ячеек в строке. Ячеек всегда столько, сколько указано в качестве параметра функции TableRows, даже если значений в параметре меньше. У каждой ячейки есть поля:
- Index — номер столбца в таблице (начиная с 1).
- IsFirst — является ли ячейка первой.
- IsLast — является ли ячейка последней.
- Value — содержимое ячейки, то есть элемент параметра-коллекции. Именно так обращаемся к значениям отдельных элементов.
Значение Value у ячейки может быть пустым (null), если количество элементов в параметре не делится ровно на количество ячеек. Письмо с ячейкой без значения не сможет сформироваться и отправиться. Поэтому нужно проверять, является ли Value ячейки пустым.
Получается, для вывода данных из коллекции в таблице:
- разбиваем коллекцию на строки таблицы с помощью TableRows ;
- разбиваем строки на ячейки с помощью Cells ;
- проверяем, что ячейка не пустая;
- обращаемся к значению элемена в ячейке с помощью Value .
@ @ @ Название: $ @ @ @
TableRows лишь отбирает строки в группы. Выводит он их всё равно подряд. Поэтому нужно использовать TableRows вместе с HTML-тегами.
Добавляем в наш пример HTML-теги:
@ @ @ Название: $ @ @ @Практическая часть
В качестве примера называем коллекцию Products и выводим название Name.
При переносе в свою рассылку замените их на нужные вам параметры.Пример 1

Выводим все элементы одинаково. Если значения нет, ячейку оставляем пустой.
Пример 2

В ячейках, где нет элемента, выводится плейсхолдер.
Пример 3

В последней строке, в случае недостатка элементов, другая верстка. Например, с объединением ячеек.
Пример 4

У последней строки другой стиль, у каждого первого элемента в строке другой стиль.
Код вёрстки:Как вывести данные в виде таблицы c
Хай to ALL. Что-то не могу сообразить, какая должна быть форматирующая строка. Вывод происходит в цикле.
printf(«ЧТО_ТО\n», i1, s1, s2, s3, s4, i2);ID AUTHOR ALBUM TITLE STYLE YEAR
0 author1 album1 title1 style1 2001
1 author1 album1 title2 style1 2001
2 author2 album2 title1 style2 1999Что-то вроде этого. Кто подскажет?=)
Сообщение отредактировано: _Denis_ — 08.12.09, 15:21
Сообщ. #2 , 08.12.09, 16:26
Рейтинг (т): 640
\t тебе в помощь
Сообщ. #3 , 08.12.09, 16:33
Рейтинг (т): 268
Читай описание printf, там все подробно описано
%-10s
вывод строки в поле шириной 10 символов, выравнивание по левому краю.
%4d
вывод целого в поле шириной 4 символа с выравниванием по правому краю.Сообщ. #4 , 08.12.09, 18:57

Рейтинг (т): нет
Cпасибо, то что нужно! Невнимательно читал описание, «%-» как-то пропустил.
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:- Предыдущая тема
- C/C++: Общие вопросы
- Следующая тема