我遇到结构定义问题。我理解语法,但无法正确使用它来制作一个有效的程序。我的任务是定义一个结构类型element_t
来表示元素周期表的一个元素。组件应包括原子序数,名称,符号,类,权重和每个shell中电子数量的七元素整数数组。以下是钠element_t
结构的组成部分。
11 Sodium Na alkali_metal 22.9898 2 8 1 0 0 0 0
定义和测试I / O函数scan_element
和print_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;
}
答案 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;
}