c - 在这种情况下,如何在 C 的主函数中使用具有结构变量的函数?
问题描述
执行时,它显示'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
not初始化1
。
第二个把一个复制string
到另一个,你不能用=
你应该用strcpy
。
那么你还没有定义 strings ,你定义char *
了哪个是不同的。为了使用它,您应该首先为其分配内存,如果它不是您想要的,则定义字符数组。
我们不打印字符串,%c
我们打印它们%s
看
struct element
{
int atno;
char name[20];
char symbol[20];
char mn[20];
float bp;
char state[20];
};
int n=118,i=0;
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()
{
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);
}
推荐阅读
- python - 修复类的参数
- python - Python网页抓取打开新标签
- angular - web-animations-js 在 IE 9 SCRIPT5007 中给出错误:预期对象;网络动画.min.js (15,23868)
- oracle - 使用 SQL*Plus 运行具有多个命令提示符会话的多个脚本
- c# - 如何在事件发生后使用 Caliburn 默认检查方法?
- python - 使用 Jinja PrefixLoader 加载的模板内的相对路径导入
- oracle-maf - Oracle MAF 2.5.1 默认应用程序左上角奇怪的红色图标
- javascript - 如何使用 Angular 管道过滤掉空值?
- python - Python csv.DictReader 的内存使用问题
- python - 用 fsolve 求解非线性系统