I am having problem with a specific part of the code which I cant find any answer to yet. Here the fscanf() was not able to read the value of file until I added an '&' sign before add.age variable in this section. I got the problem solved but still cant figure out how it works. I mean why do I need to provide address of an integer data type and not of any string. Can any one explain please?
while(fscanf(fp, "%s %d %s", add.name, &add.age, add.dept)!=EOF)
        {
            printf("%s\t\t %d\t\t %s\n", add.name, add.age, add.dept);
        }
This is the full code that I wrote for reference if you want
#include<stdio.h>
#include<stdlib.h>
void add_user(void);
void see(void);
void see_all(void);
struct student
{
    char name[50];
    char dept[50];
    int age;
}add, check;
int main()
{
    int choice;
    printf("1. Add \n2. See \n3. See All \nEnter choice:");
    scanf("%d", &choice);
    switch(choice)
    {
        case 1:add_user();
        break;
        case 2:see();
        break;
        case 3:see_all();
        break;
        default:printf("Wrong Input");
    }
}
void add_user()
{
    FILE *fp;
    printf("Enter name : ");
    fflush(stdin);
    gets(add.name);
    printf("Enter age : ");
    scanf("%d", &add.age);
    printf("Enter department : ");
    fflush(stdin);
    gets(add.dept);
    fp=fopen("Creating a file with multiple records and reading it.txt", "a+");
    if(fp==NULL)
    {
        printf("file pointer is null");
        exit(0);
    }
    fprintf(fp, "%s %d %s\n", add.name, add.age, add.dept);
    fclose(fp);
    main();
}
void see()
{
}
void see_all()
{
    FILE *fp;
    fp=fopen("Creating a file with multiple records and reading it.txt", "r");
    if(fp==NULL)
    {
        printf("file pointer is null");
        exit(0);
    }
    printf("Name\t\t Age\t\t Department\n");
    while(fscanf(fp, "%s %d %s", add.name, &add.age, add.dept)!=EOF)
    {
        printf("%s\t\t %d\t\t %s\n", add.name, add.age, add.dept);
    }
    fclose(fp);
}
 
     
    