未初始化的结构定义

时间:2012-11-20 02:34:17

标签: c struct typedef

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

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

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

***结束以下代码,同时添加了相应的循环和&标志虽然没有在下面显示,一切正常。我很想知道我的类中的powerpoint如何使用{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;
}

1 个答案:

答案 0 :(得分:0)

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

1)使用scanf非指针类型(如int或float)读取时,请使用&amp;运营商。 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的更多信息,或许this article可能会有用。

以下是更正后的代码:

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;
}