0

当我执行以下代码时,我收到此行的错误消息scanf("%s",A.(T+i)->CNE)

错误信息 : expected identifier before '(' token|

我能知道是什么问题吗?提前致谢。

typedef struct date
{
    int day;
    int month;
    int year;
}date;
typedef struct Student
{
    char CNE[10];
    char FirstName[30];
    char LastName[30];
    date BD;
    float Grades[6];
}Student;
typedef struct Class
{
    Student T[1500];
    int dim;
}Class;
Class input(Class A)
{
    int i=A.dim;
    printf("Enter the student CNE : ");
    scanf("%s",A.(T+i)->CNE);
}
4

3 回答 3

1

(T+i)不是结构的成员Class,所以不能使用A.(T+i)

似乎A.(T+i)->CNE应该是A.T[i].CNE

A此外,从函数返回时丢弃修改后的内容也很可疑input。看来你忘记写了return A;

于 2020-12-25T15:10:23.477 回答
1

唯一可以在.运算符之后的是成员名称。它不能是诸如 的表达式(T+i)

通常,要访问i成员的元素T,将使用A.T[i],然后其CNE成员将是A.T[i].CNE

想必您一直在研究指针算术并对A.T[i]使用指针进行访问感兴趣。在这种情况下,A.T + i将给出元素的i地址A.T。然后(A.T + i)->CNE将是该CNE元素的成员。(注意这A.T是一个数组,但是,在这个表达式中,它会自动转换为指向它的第一个元素的指针。所以A.T + i相当于&A.T[0] + i,它表示获取地址A.T[0]并按元素前进i。)

于 2020-12-25T15:10:30.057 回答
1

看来你的意思是

scanf("%s",A.T[i].CNE);

或者

scanf("%s", ( A.T + i )->CNE );

那是在你使用的表达中

A.(T+i)->CNE

点运算符需要一个标识符而不是表达式。

尽管它的返回类型不是,但您的函数什么也不返回void

例如,可以通过以下方式声明和定义该函数

void input(Class *A)
{
    int i = A->dim;
    printf("Enter the student CNE : ");
    scanf( "%s", ( A->T + i )->CNE );
}
于 2020-12-25T15:13:14.603 回答