typedef struct Calendar {
int day;
int month;
int year;
}Calendar;
typedef struct Person {
char name[40];
int age;
float salary;
Calendar birth;
}Person;
void add(Person * a, int * tam);
If I want to pass structure as argument and modify its original value I have to pass as pointer, but a array of structure shouldn't be passed as pointer of a pointer like a array of array? Why the compiler works with a pointer and gives error with a pointer of a pointer?
for (int i = 0; i < *tam + 1; i++)
{
printf("Insert your name:\n");
fgets(name, 30, stdin);
*a[i].name = name;
}
The last line gives warning C4047: char differs in levels of indirections. If I remove '*' it doesn't compile. How do I correctly access a array member from a array of structure?
EDIT 1: To clarify here is the full add()
function and main()
function.
void add(Person * a, int * tam) {
char name[30];
int op = 0;
int c, day = 0, month = 0, year = 0, Calendar = -1;
float sal = -1;
for (int i = 0; i < *tam + 1; i++)
{
printf("Insert your name:\n");
fgets(name, 30, stdin);
*a[i].name = name;
while ((c = getchar()) != '\n' && c != EOF)
;
do
{
printf("Insert %s's age:\n", name);
scanf("%d", &op);
while ((c = getchar()) != '\n' && c != EOF)
;
if (!op)
printf("invalid age!\n");
else
a[i].age = op;
} while (op <= 0);
do
{
printf("Insert %s's salary:\n", name);
scanf("%f", &sal);
while ((c = getchar()) != '\n' && c != EOF)
;
if (sal < 0)
printf("Invalid salary!\n");
else
a[i].salary = sal;
} while (sal < 0);
do
{
printf("Insert %s's date birth\n", name);
printf("Day:\n");
scanf("%d", &day);
while ((c = getchar()) != '\n' && c != EOF)
;
printf("Month:\n");
scanf("%d", &month);
while ((c = getchar()) != '\n' && c != EOF)
;
printf("Year:\n");
scanf("%d", &year);
while ((c = getchar()) != '\n' && c != EOF)
;
if ((day > 0 && day < 31) && (month > 0 && month < 12) && (year > 0))
{
Calendar = 1;
a[i].birth.day = day;
a[i].birth.month = month;
a[i].birth.year = year;
}
else
printf("Invalid calendar!\n");
} while (Calendar != 1);
}
*tam++;
}
main() {
Person book[10];
int c, tam = 0;
char op, out = 0;
while (!out)
{
do
{
printf("1: Insert a profile\n");
printf("2: Change a profile\n");
printf("3: Erase a Profile\n");
printf("4: Show all profiles\n");
printf("5: Search\n");
printf("0: Exit\n");
scanf("%c", &op);
while ((c = getchar()) != '\n' && c != EOF)
;
} while (op < '0' || op > '5');
switch (op)
{
case '1':
add(book, &tam);
break;
case '2':
break;
case '3':
break;
case '4':
read(book, &tam);
break;
case '5':
break;
case '0':
out = 1;
break;
default:
break;
}
}
}