执行时,显示未定义'e'。我无法在其中运行功能“ search1”。请在回答时,还请说明如何使用户添加元素的功能。(周期表)。感谢您的帮助。
#include<stdio.h>
#include<stdlib.h>
struct element
{
int atno;
char *name;
char *symbol;
char *mn;
float bp;
char *state;
};
int i=0,n=118;
void search1();
int main()
{
struct element e[n];
e[1].atno=1;
e[1].name="Hydrogen";
e[1].symbol="H";
e[1].mn="Metal";
e[1].bp=-252.879;
e[1].state="Gas";
e[2].atno=2;
e[2].name="Helium";
e[2].symbol="He";
e[2].mn="Non-Metal";
e[2].bp=-268.28;
e[2].state="Gas";
search1();
}
void search1()
{
int a;
printf("Enter the atomic number: ");
scanf("%d",&a);
if(a<1 && a>n)
{
printf("The element dosen't exist");
}
else
{
for(i=0;i<n;i++)
{
if (e[i].atno == a)
{
printf("Atomic Number = %d \nName = %c \nSymbol = %c \nMetal/Non-Metal = %c \nBoiling Point(deg C) = %f \nState at room temperature = %c\n",e[i].atno,e[i].name,e[i].symbol,e[i].mn,e[i].bp,e[i].state);
}
}
}
}
当您在一个函数中定义变量时,它将是该函数的局部变量,位于该函数堆栈内且不在该范围内,因此将不再定义它,因此如果要让函数查看局部变量,则应将此变量传递给其他函数,但还要注意,如果按值调用它们,则如果对这些功能进行任何更改,它们都不会在该功能之外更改。
您也可以定义全局变量,如果您不想传递它们,但是不建议这样做,因为如果您不够谨慎的话,这样每个函数都可以访问它们,这可能会带来很大的风险。
除了还有其他几个错误:
首先,我们从array
而不是0
初始化1
。>>
将一个string
复制到另一个中的秒,您不能使用=
,而应该使用strcpy
。
然后您还没有定义字符串,则定义了char *
,这是不同的。为了使用它,您应该首先为其分配内存,如果不是您想要的,则定义字符数组。
我们不使用%c
打印字符串,而使用%s
打印字符串
而且您也没有定义int n
(在主目录中)和int i
(在search1中),因此不能使用未定义和未初始化的变量,因此在定义int n之后,应该对其进行初始化。
外观
struct element
{
int atno;
char name[20];
char symbol[20];
char mn[20];
float bp;
char state[20];
};
void search1(struct element e[],int n)
{
int a;
printf("Enter the atomic number: ");
scanf("%d", &a);
if (a<1 && a>n)
{
printf("The element dosen't exist");
}
else
{
for (int i = 0; i < n; i++)
{
if (e[i].atno == a)
{
printf("Atomic Number = %d \nName = %s \nSymbol = %s \nMetal/Non-Metal = %s \nBoiling Point(deg C) = %f \nState at room temperature = %s\n", e[i].atno, e[i].name, e[i].symbol, e[i].mn, e[i].bp, e[i].state);
}
}
}
}
int main()
{
int n=2;
struct element e[n];
e[0].atno = 1;// you could also use malloc to allocate memory for char* type
strcpy(e[0].name , "Hydrogen");
strcpy(e[0].symbol , "H");
strcpy(e[0].mn , "Metal");
e[0].bp = -252.879;
strcpy(e[0].state ,"Gas");
e[1].atno = 2;
strcpy(e[1].name, "Helium");
strcpy(e[1].symbol, "He");
strcpy(e[1].mn, "Non-Metal");
e[1].bp = -268.28;
strcpy(e[1].state, "Gas");
search1(e,n);
}