Как вывести структуру в виде таблицы на СИ?
возникла такая проблема- пытался вывести структуру в виде таблицы, но почему-то не получается.
#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<4; i++)
{
printf("[%d]", i);
scanf("%d", &table[i].year);
scanf("%d", &table[i].ussr);
scanf("%d", &table[i].usa);
scanf("%d", &table[i].eng);
scanf("%d", &table[i].fran);
}
for (int i = 0; i<3; i++)
{
printf("%s ", nazva[i]);
printf("%d ", table[i].year);
printf("%d ", table[i].ussr);
printf("%d ", table[i].usa);
printf("%d ", table[i].eng);
printf("%d ", table[i].fran);
printf("\n");
}
system("pause");
return 0;
}
Вот собственно говоря код этого чуда, не судите строго, я еще толком не разобрался, что тут да как...
Не могу понять как сделать хотя бы приблизительно такой вид у таблицы 
Ответы (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 < ArrSize; i++)
{
printf("%10d ", table[i].year);
printf("%10d ", table[i].ussr);
printf("%10d ", table[i].usa);
printf("%10d ", table[i].eng);
printf("%10d ", table[i].fran);
printf("\n");
}
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)
{setlocale(LC_ALL, "");
char sh[] = "--------------------------------------------------------------";
char *nazva[] = { "Годы", "СССР", "США", "Англия", "Франция" };
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); но цикл этим не заканчивается, продолжаем так для всех данных, а затем в конце с новой строки, иначе все данные пойдут строчкой). Еще раз хочу всем сказать огромное спасибо, без вашей помощи я бы не справился)))