Cuando intento ejecutar el siguiente código, genera un error:

símbolo indefinido st

Me muestra un error en la opción 2 cuando intento mostrar los registros completos de los estudiantes.

Lo estoy ejecutando en el compilador 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();
}
c
-4
BuchiBaba 4 mar. 2018 a las 10:33

4 respuestas

La mejor respuesta

El problema es que su declaración está en el lugar equivocado.

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

Esta declaración solo es visible dentro de la cláusula if(option==1), pero intenta usarla dentro de else if(option == 2)

Supongo que deberías mover la declaración al inicio de tu programa

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

Debe leer sobre un par de conceptos que son importantes cuando utiliza variables, alcance , que es el área de su programa donde la variable es visible, y extensión , que es el momento para el cual existe su variable. Ambos estaban equivocados en el código que escribiste.

Hay muchos otros errores en su código, pero supongo que los descubrirá a medida que avance.

3
john 4 mar. 2018 a las 07:46

struct student st[9]; está confinado al alcance de option igual a 1, por lo que st está fuera del alcance en las otras partes del bloque if, por lo tanto El diagnóstico del compilador.

Declare al comienzo de main, como lo hace para option.

Por último, piense en migrar desde un compilador Turbo: los estándares han avanzado considerablemente desde entonces, y solo está adquiriendo malos hábitos.

1
Bathsheba 4 mar. 2018 a las 07:40

struct student st[9]; es una variable local en los bloques if, que no está disponible en el bloque else e intenta usarla. Mueva la declaración sobre el if para que la matriz st esté disponible en ambos bloques.

1
S.M. 4 mar. 2018 a las 07:44

Es por el alcance de st. En su código, la variable solo es válida dentro del bloque if, es decir, no está disponible en el bloque else. Por lo tanto, obtiene un error de compilación.

Intenta esto en su lugar:

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 mar. 2018 a las 07:48