在C中,定义结构类型element_t以表示元素周期表中的一个元素

时间:2012-12-03 22:31:41

标签: c

我正在用C编写代码并且它没有给我任何错误,但我没有得到所需的结果。

定义结构类型element_t以表示元素周期表中的一个元素。组件应包括原子序数(整数);名称,化学符号和类别(字符串);原子量的数字字段;和每个壳中电子数的七元素整数数组。以下是钠的element_t结构的组成部分。 11 sodium Na alkali_metal 22.9898 2 8 1 0 0 0 0定义和测试I / O函数scan_element和print_element。

一旦我编译并测试代码,这就是我得到的输出 11ÿsodNa Na 22.989800 2810000%

如你所见,它没有给我元素名称或元素类。

这是我的代码:

#include <stdio.h>
#include <string.h>
#define ELEM_NAME 15
#define ELEM_CLASS 20
#define ELECT 7

  typedef struct
  {
    int atom_num;
    char name[ELEM_NAME];
    char symbol[3];
    char class_of_metal [ELEM_CLASS];
    double atomic_weight;
   nt elec[ELECT];
  } element_t;

element_t scan_element();

void print_element(element_t my_element);

element_t

scan_element(); 

int main(void)
{

  int i = 0;
  element_t my_element;

  printf("enter the atomic number:\n");
  scanf("%d", &my_element.atom_num);

  printf("enter element name:\n");
  scanf("%s", &my_element.name[ELEM_NAME]);

  printf("enter symbol:\n");
  scanf("%s", &my_element.symbol[3]);

  printf("enter type of metal:");
  scanf("%s", &my_element.class_of_metal[ELEM_CLASS]);

  printf("enter atomic weight:");
  scanf("%lf", &my_element.atomic_weight);

  printf("enter number of electrons in each shell:");
  scanf("%d", &my_element.elec[ELECT]);

 /* output */
    printf("%d   %s   %s   %s   %lf   %d", my_element.atom_num,
                                           my_element.name,
                                           my_element.symbol,
                                           my_element.class_of_metal,
                                           my_element.atomic_weight,
                                           my_element.elec[ELECT]);

 return (0);
 }

1 个答案:

答案 0 :(得分:3)

你误解了你应该如何将scanf()字符串放入数组中。例如,

&my_element.name[ELEM_NAME]

指向元素的结尾(在我看来,你认为scanf()需要这些信息,但不是,它没有),所以你要写出数组的边界。< / p>

所以你应该把所有这些错误的函数调用改成

scanf("%s", my_element.name);
scanf("%s", my_element.symbol);
scanf("%s", my_element.class_of_metal);
scanf("%d", my_element.elec);

分别

(另外,请阅读数组,指针和指针算法。这太基础了......)