-2

我在结构定义方面遇到问题。我理解语法,但无法正确使用它来制作工作程序。我的任务是定义一种结构类型element_t来表示元素周期表中的一个元素。组件应包括原子序数、名称、符号、类别、重量和一个七元素整数数组,用于表示每个壳中的电子数。以下是element_t钠结构的组成部分。

11 Sodium Na alkali_metal 22.9898 2 8 1 0 0 0 0

定义和测试 I/O 功能scan_elementprint_element. 这是我的代码......但没有工作。我不明白为什么编译器说我没有初始化 element_t。提前致谢。

***以以下代码结束,还添加了适当的循环和 & 符号,尽管它没有在下面显示并且一切正常。我很想知道课堂上的幻灯片是如何使用 {2 8 1 0 0 0 0} 来填充 int 数组而不是循环的。我正在使用的书也使用了循环方法,但我想尝试使用 {} 方法。再次感谢。

#include <stdio.h>
#include <string.h>

typedef struct  {
    int atomic_num;
    char* element_name; revised:    char element_name[25];
char* element_symbol; revised:   element_symbol[2];
    char* element_class; revised:   char element_class[25];
    double atomic_weight;
    int electrons[7];
} element_t;

int scan_element(); revised: element_t scan_element();
void print_element(element_t my_element);

int scan_element() {
    element_t my_element;

    printf("Enter Atomic Number> ");
    scanf("%d", my_element.atomic_num);

    printf("Enter Element Name> ");
    scanf("%s", my_element.element_name);

    printf("Enter Element Symbol> ");
    scanf("%s", my_element.element_symbol);

    printf("Enter Element Class> ");
    scanf("%s", my_element.element_class);

    printf("Enter Atomic Weight> ");
    scanf("%lf", my_element.atomic_weight);

    printf("Enter Electons in each shell> ");
    scanf("%d", my_element.electrons);

    print_element(my_element);
    return 0;
}

void print_element(element_t my_element) {
    printf("%d %s %s %s %lf %d \n",my_element.atomic_num,my_element.element_name, my_element.element_symbol,my_element.element_class,my_element.atomic_weight,&my_element.electrons);
}

int main()
{
    scan_element(); revised: print_element(scan_element());

    return 0;
}
4

1 回答 1

0

我在您的代码中发现了一些问题:

1) 使用 scanf 非指针类型(如 int 或 float)读取时,使用 & 运算符。Scanf 需要一个指向变量的指针,而不是变量本身。

2)如果您将字符串声明为动态(char*),请务必使用 malloc 为它们分配内存。否则像 char my_string[30] 一样静态声明它们。

3)您的 scan_element 函数应该返回一个 element_t 结构,而不是一个 int。或者,您可以将指针传递给现有 element_t 结构并在您的函数中对其进行修改。

4)您不能直接使用 scanf/printf 读取/打印 int 数组。每个元素都必须单独阅读。

5)您的 scan_element 函数可能不应该包含 print_element :P

如果您想了解更多关于 ANSI C 中的控制台 I/O 的信息,也许这篇文章会很有用。

这是更正后的代码:

include <stdio.h>
#include <string.h>

typedef struct  {
    int atomic_num;
    char element_name[30];
    char element_symbol[3];
    char element_class[30];
    double atomic_weight;
    int electrons[7];
} element_t;

element_t scan_element();
void print_element(element_t my_element);

element_t scan_element() {
    int i = 0;
    element_t my_element;

    printf("Enter Atomic Number> ");
    scanf("%d", &my_element.atomic_num);

    printf("Enter Element Name> ");
    scanf("%s", my_element.element_name);

    printf("Enter Element Symbol> ");
    scanf("%s", my_element.element_symbol);

    printf("Enter Element Class> ");
    scanf("%s", my_element.element_class);

    printf("Enter Atomic Weight> ");
    scanf("%lf", &my_element.atomic_weight);

    for(i = 0; i<7; i++)
    {
        printf("Enter Electon - electron nr %d\n",i);
        scanf("%d", &my_element.electrons[i]);
    }

    return my_element;
}

void print_element(element_t my_element) {
    int i;
    printf("%d %s %s %s %lf\n",
           my_element.atomic_num,
           my_element.element_name, 
           my_element.element_symbol,
           my_element.element_class,
           my_element.atomic_weight);
    for(i = 0; i<7; i++)
    {
        printf("%d",my_element.electrons[i]);
    }
    puts("\n");
}

int main()
{
    element_t val = scan_element();
    print_element(val);

    return 0;
}
于 2012-11-20T03:01:56.210 回答