当我尝试运行以下代码时,它会产生错误:
未定义的符号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();
}
答案 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编译器迁移:从那时起,标准已经发生了很大的变化,而你只是养成了坏习惯。