Когда я пытаюсь запустить следующий код, он генерирует ошибку:

неопределенный символ st

Это показывает мне ошибку в варианте 2, когда я пытаюсь отобразить полные записи студентов.

Я запускаю его на турбо 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();
}
c
-4
BuchiBaba 4 Мар 2018 в 10:33

4 ответа

Лучший ответ

Проблема в том, что ваша декларация не в том месте.

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

Это объявление видно только внутри предложения if(option==1), но вы пытаетесь использовать его внутри else if(option == 2)

Я предполагаю, что вы должны переместить объявление в начало вашей программы

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

Вы должны прочитать о нескольких понятиях, которые важны при использовании переменных: scope , которая является областью вашей программы, где переменная является видимой, и экстент , который является временем для которого ваша переменная существует. Оба были неправы в написанном вами коде.

В вашем коде много других ошибок, но я думаю, что вы узнаете о них по ходу дела.

3
john 4 Мар 2018 в 07:46

struct student st[9]; ограничен scope для option, равным 1, поэтому st находится вне области видимости в других частях блока if, поэтому Компилятор диагностический.

Объявите это в начале main, как и для option.

И наконец, подумайте о переходе с Turbo-компилятора: стандарты с тех пор значительно изменились, и вы только получаете вредные привычки.

1
Bathsheba 4 Мар 2018 в 07:40

struct student st[9]; - это локальная переменная в блоках if, которая недоступна в блоке else, и вы пытаетесь ее использовать. Переместите объявление над if, чтобы сделать массив st доступным в обоих блоках.

1
S.M. 4 Мар 2018 в 07:44

Это из-за объема 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
1
4386427 4 Мар 2018 в 07:48