here is the code:

```
#include <stdio.h>

int main()
{
    struct date
    {
        int year;
        int month;
        int day;
    };
    struct address
    {
        char city[15];
        char district[15];
    };
    struct student
    {
        char name[25];
        int roll_no;
        struct date DOB;
        struct address add;
    };
    struct student BIM[10];
    int i;
    for(i=0;i<11;i++)
    {
        printf("Enter student name: ");
        scanf("%s",BIM[i].name);
        printf("Enter roll no: ");
        scanf("%d",&BIM[i].roll_no);
        printf("Enter Date of birth: ");
        scanf("%d %d %d",BIM[i].DOB.year,BIM[i].DOB.month,BIM[i].DOB.day);
        printf("Enter address: ");
        scanf("%s %s",BIM[i].add.district,BIM[i].add.city);
    }
    int roll;
    printf("Enter roll no: ");
    scanf("%d",&roll);
    for(i=0;i<11;i++)
    {
        if(roll==BIM[i].roll_no)
        {
            printf("Name : %s",BIM[i].name);
            printf("Roll no : %d",BIM[i].roll_no);
            printf("DOB : %d/%d/%d",BIM[i].DOB.year,BIM[i].DOB.month,BIM[i].DOB.day);
            printf("Address : %s,%s",BIM[i].add.district,BIM[i].add.city);
            break;
        }
    }
}

```

The program ends after taking DOB during the 1st loop.

Here are the warnings:

```
main.c:32:17: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
         scanf("%d %d %d",BIM[i].DOB.year,BIM[i].DOB.month,BIM[i].DOB.day);

main.c:32:20: warning: format ‘%d’ expects argument of type ‘int *’, but argument 3 has type ‘int’ [-Wformat=]
         scanf("%d %d %d",BIM[i].DOB.year,BIM[i].DOB.month,BIM[i].DOB.day);

main.c:32:23: warning: format ‘%d’ expects argument of type ‘int *’, but argument 4 has type ‘int’ [-Wformat=]
         scanf("%d %d %d",BIM[i].DOB.year,BIM[i].DOB.month,BIM[i].DOB.day);

```