У меня есть программа, которая запрашивает количество студентов, а затем их имя, фамилию и идентификатор студента.Я пытаюсь напечатать каждое из значений, которые хранятся в массиве студентов.Тем не менее, я получаю сообщение об ошибке printf("%d\n", *(students+i)->studentID);
из Indirection requires pointer operand ('int' invalid)
.
Я попытался изменить строку на printf("%d\n", (students+i)->studentID);
, и это, кажется, работает.Почему это происходит и почему нам не нужно делать это для приведенных выше операторов печати, которые являются печатными символами?Спасибо
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Students {
char firstName[20];
char lastName[20];
int studentID;
} Student;
void printRecords(Student *students, int size){
for(int i = 0; i < size; i++){
printf("%c\n", *(students+i)->firstName); // prints
printf("%c\n", *(students+i)->lastName); // prints
printf("%d\n", *(students+i)->studentID); // does not print
}
}
int main(int argc, const char * argv[]) {
int number_of_records;
printf("Please enter the number of records you would like to add:\n");
scanf("%d", &number_of_records);
Student *S;
S = (Student*)malloc(sizeof(Student) * number_of_records);
for(int i = 0; i < number_of_records; i++){
printf("First name of student %d\n", i+1);
scanf("%s/n", S[i].firstName);
printf("Last name of student %d\n", i+1);
scanf("%s/n", S[i].lastName);
printf("StudentID of student %d\n", i+1);
scanf("%d/n", &S[i].studentID);
}
printRecords(S, number_of_records);
}