C中未定义的符号st(学生记录系统)

时间:2018-03-04 07:33:47

标签: c

当我尝试运行以下代码时,它会产生错误:

  

未定义的符号st

当我尝试显示完整的学生记录时,它在选项2上显示错误。

我在turbo C ++编译器上运行它。

void main()
{
    int option, i;
    while (5)
    {
    printf("========== Student Database ==========\n");
    printf("--------------------------------------\n");
    printf("1. Insert Record\n");
    printf("2. Display Record\n");
    printf("3. Edit/Update Record\n");
    printf("4. Delete a Record\n");
    printf("5. Exit\n");
    printf("--------------------------------------\n");
    printf("Enter Your Choice: ");
    scanf("%d",&option);
    if(option==1)
    {
        struct student st[9];
        {
            printf("\student data");
        }
        clrscr();
        break;
    }
    else if(option==2)
    {
        printf("\n===== Displaying Student Information =====\n");
            printf("\n Roll No: \t Name \t \t \t Marks \t Mobile Number\n");
            for (i = 0; i < 9; ++i)
            {
                printf("\n %d \t %st \t \t \t %d \t %d\n", st[i].roll, st[i].name, st[i].marks, st[i].number);
            }
            clrscr();
            break;
    }
    getch();
}

4 个答案:

答案 0 :(得分:3)

问题是你的声明是在错误的地方。

if(option==1)
{
    struct student st[9];
    ...
}

此声明仅在if(option==1)子句中可见,但您尝试在else if(option == 2)

中使用它

我猜你应该把声明移到程序的开头

void main()
{
    int option, i;
    struct student st[9];

您应该阅读有关使用变量时重要的几个概念,范围,这是您的程序中可见变量的区域,范围是变量存在的时间。你写的代码都错了。

您的代码中还有很多其他错误,但我想您会在漫长的过程中发现这些错误。

答案 1 :(得分:1)

struct student st[9];if块中的局部变量,在else块中不可用,您尝试使用它。将声明移到if上方,使两个块中的st数组可用。

答案 2 :(得分:1)

这是因为st的范围。在您的代码中,变量仅在if块内有效,即它在else块中不可用。因此,您会收到编译错误。

请改为尝试:

struct student st[9];  // Declare outside the if
if(option==1)
{
    // struct student st[9];  Don't do it inside the if

答案 3 :(得分:1)

struct student st[9];仅限于option范围等于1,因此st超出if其他部分的范围阻止,因此编译器诊断。

main的开头声明它,与option一样。

最后,考虑从Turbo编译器迁移:从那时起,标准已经发生了很大的变化,而你只是养成了坏习惯。