постоянная ошибка: подписанное значение не является ни массивом, ни указателем, ни вектором - PullRequest
0 голосов
/ 31 мая 2018

У меня проблемы с заданием в колледже, и я бы хотел помочь.

Часть кода, о которой идет речь:

#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 голосов
/ 31 мая 2018

st - это аргумент вашей функции, это одно значение типа student.Таким образом, вы не можете подписать его, как говорится в ошибке.t с другой стороны - это массив student.

Глядя на свой код, где у вас есть

st[maxcounter].id > maxid

вы, вероятно, имели в виду

t[maxcounter].id > maxid
0 голосов
/ 31 мая 2018

Прежде всего,

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

неверно, оно должно быть

scanf("%99s", name);

При этом использование в строке

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

означаетнеправильно, так как st определяется как student st.st не является типом массива, поэтому вы не можете использовать индексирование по нему, или, другими словами, вы не можете использовать st в качестве операнда оператора [].

...