Основной ответ
Либо используйте int eleNum
в структуре, либо используйте char *eleNum
и измените инициализатор, чтобы использовать "1"
для водорода.
В настоящее время вы печатаете eleNum
с %s
- это совершенно неправильно (печатать целочисленный указатель, как если бы он был символьным указателем). Используйте %3d
, если eleNum
становится int
; используйте %3s
, если оно становится char *
.
Если он остается int *
, вам нужно будет указать что-то вроде (int []){ 1 }
(составной литерал C99 или новее) в качестве инициализатора и *database[i].eleNum
или database[i].eleNum[0]
в операторе printf()
для печати и используйте %3d
.
#include <stdio.h>
typedef struct ptElements
{
int eleNum;
char *eleSym;
char *eleNme;
char *elePrd;
char *eleGrp;
} Elements;
Elements database[] =
{
{ 1, "H", "Hydrogen", "1", "1" },
{ 2, "He", "Helium", "1", "18" },
{ 3, "Li", "Lithium", "2", "1" },
{ 4, "Be", "Berylium", "2", "2" },
{ 5, "B", "Boron", "2", "13" }
};
int main(void)
{
int limit = sizeof(database) / sizeof(Elements);
for (int i = 0; i < limit; i++)
{
printf("%3d - %-3s %-20s %2s %2s\n", database[i].eleNum,
database[i].eleSym, database[i].eleNme, database[i].elePrd,
database[i].eleGrp);
}
return 0;
}
Тангенциальная информация о периодической таблице
Замечу, что все элементы теперь имеют однобуквенные или двухбуквенные символы; трехбуквенные символы, такие как Uub
, теперь заменены на «настоящие» имена. (См. WebElements в качестве одного источника информации - несомненно, есть много других, таких как Википедия Периодическая таблица элементов .)
В 2010 году у меня была таблица элементов SQL с записями (N
означает «нестабильный» или «радиоактивный»):
INSERT INTO elements VALUES(112, 'Uub', 'Ununbium', 277.0000, 'N');
INSERT INTO elements VALUES(113, 'Uut', 'Ununtrium', 284.0000, 'N');
INSERT INTO elements VALUES(114, 'Uuq', 'Ununquadium', 289.0000, 'N');
INSERT INTO elements VALUES(115, 'Uup', 'Ununpentium', 288.0000, 'N');
INSERT INTO elements VALUES(116, 'Uuh', 'Ununhexium', 293.0000, 'N');
INSERT INTO elements VALUES(118, 'Uuo', 'Ununoctium', 294.0000, 'N');
Первые имена для них были добавлены в середине 2010 года. К 2016 году у меня были данные, эквивалентные этому (я добавил период и групповую информацию между датами):
INSERT INTO elements VALUES(112, 'Cn', 'Copernicium', 285.1800, 7, '12', 'N');
INSERT INTO elements VALUES(113, 'Nh', 'Nihonium', 286.1800, 7, '13', 'N');
INSERT INTO elements VALUES(114, 'Fl', 'Flerovium', 289.1900, 7, '14', 'N'); -- Yes, Fl and Mc have the same weight
INSERT INTO elements VALUES(115, 'Mc', 'Moscovium', 289.1900, 7, '15', 'N');
INSERT INTO elements VALUES(116, 'Lv', 'Livermorium', 293.2000, 7, '16', 'N');
INSERT INTO elements VALUES(117, 'Ts', 'Tennessine', 293.2100, 7, '17', 'N');
INSERT INTO elements VALUES(118, 'Og', 'Oganesson', 294.2100, 7, '18', 'N');
Меня интригует то, что я пережил «пополнение» периодической таблицы, по крайней мере, в течение первых семи ее периодов.
(Вы можете найти информацию о гипотетическом Ununennium (элемент 119, Uue) и Unbinilium (элемент 120, Ubn) в Википедии, если вам интересно. Также есть За элементом 118: следующая строка Периодического издания Таблица .)