持久性错误:下标值既不是数组也不是指针,也不是向量

时间:2018-05-31 08:52:28

标签: c pointers struct declaration

我的大学任务有问题,我希望得到一些帮助。

有问题的代码部分:

#include <stdio.h>
#include <stdlib.h>
#define MAXSTRING 100

int counter = 0;
int maxcounter = 0;
int maxid = 0;

typedef struct{
   char name[MAXSTRING];
   int id;
}student;


 int AddStudent(student st, student *stArray) {
     student t[] = {"",0};
     int id;
     char name[MAXSTRING];

     printf("First enter the student's id\n");
     scanf("%d", &id);
     printf("Now enter the student's name\n");
     scanf("%s", name[MAXSTRING]);

     if (st[maxcounter].id > maxid){
         maxid = t[maxcounter].id;
     }
     maxcounter++;
     t[maxcounter].id = id;
     t[maxcounter].name = name;
    printf("%d", t[maxcounter].id);
      }

t[maxcounter]的每个实例中都会出现以下错误:

 error: subscripted value is neither array nor pointer nor vector
         maxid = st[maxcounter].id;
                   ^

你知道是什么导致了这个吗?我没有宣布结构正确吗?

2 个答案:

答案 0 :(得分:1)

首先,

  scanf("%s", name[MAXSTRING]);

错了,应该是

scanf("%99s", name);

那说,看看行中的用法

if (st[maxcounter].id > maxid){

错误,因为st定义为student stst不是数组类型,因此您无法对其使用索引,换句话说,您无法使用st作为[]运算符的操作数。

答案 1 :(得分:0)

st是函数的参数,它是student类型的单个值。因此,您无法按错误所述下标。另一方面,tstudent的数组。

查看您的代码,

st[maxcounter].id > maxid
你可能意味着

t[maxcounter].id > maxid