我已经用 C 语言创建了一个带有动态字段的元素周期表程序,或者至少我尝试过。
稍后我将使用其他 116 个元素扩展程序,但现在,它将是这样的。
编译器什么也没说,但我得到一个运行时错误:'内存访问冲突'
我忽略/错过了什么?
输出应该只显示保存的元素(铝/镭)。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char Name[20];
char Symbol[3];
char Atomicnumber[5];
char* entrys;
} Element;
int main(void)
{
//Define the two entrys/elements
Element Aluminium;
strcpy(Aluminium.Name, "Aluminium");
strcpy(Aluminium.Symbol, "Al");
strcpy(Aluminium.Atomicnumber, "13");
Element Radium;
strcpy(Radium.Name, "Radium");
strcpy(Radium.Symbol, "Ra");
strcpy(Radium.Atomicnumber, "88");
int size=0;
//Define field
printf ("size of field:");
scanf( "%d" , &size);
//Gives the saved Elements an Adress in Array/Field
Element Periodictable [size];
strcpy(Periodictable[13].Name, "Aluminium");
strcpy(Periodictable[13].Symbol, "Al");
strcpy(Periodictable[13].Atomicnumber, "13");
strcpy(Periodictable[13].entrys, "1");
strcpy(Periodictable[88].Name, "Radium");
strcpy(Periodictable[88].Symbol, "Ra");
strcpy(Periodictable[88].Atomicnumber, "88");
strcpy(Periodictable[88].entrys, "1");
void output(Element* Periodictable, int*entry);
printf("Recorded elements:\n");
printf("\n");
for (int i=1; i<= size; i++)
{
if (Periodictable[i].entrys)
{
printf("Name: %s \n",Periodictable[i].Name);
printf("Symbol: %s \n",Periodictable[i].Symbol);
printf("Atomic number: %s \n",Periodictable[i].Atomicnumber);
printf("\n");
}
else i++;
}
return (0);
}
输出应该是这样的:
Recorded elements:
Name: Aluminium
Symbol: Al
Atomic number: 13
Name: Radium
Symbol: Ra
Atomic number: 88
仍应创建定义的字段,但不应在控制台中显示空字段/地址