首页 > 解决方案 > 在这种情况下,如何在 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);
            }
        }
    }
}

标签: cdata-structures

解决方案


当您在一个函数中定义一个变量时,它将是该函数的局部变量,并且在该函数堆栈内和该范围之外,它将不再被定义,因此如果您希望函数传递此变量,则应将此变量传递给其他函数查看您的局部变量,但还要注意,如果您按值调用它们,那么如果您在这些函数中对它们进行任何更改,它们将不会在该函数之外被更改。

您也可以定义全局变量,如果您不想传递它们,但不建议这样做,因为这样每个函数都可以访问它们,如果您不够小心,可能会导致很大的风险。

除此之外还有其他几个错误:

array首先,我们从0not初始化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);
}

推荐阅读