Ввод в массив указателей из файла с ошибкой - PullRequest
0 голосов
/ 08 мая 2020

Я сталкиваюсь с этой ошибкой «индексируемое значение не является массивом, указателем или вектором» для empF[i]
вот мой код

employee empF[100];
int i=0;
void test(){
    FILE *fp;
    employee empF;
    fp=fopen("employee.csv","r");
    employee temp;
    char x[100];
    while(fgets(x,100,fp)!=NULL){
        removeCommas(x);
        sscanf(x,"%d %s %ld %s %d",&(temp.employee_id),temp.employee_name,&(temp.phno),temp.shift,&(temp.area_code));
        empF[i].employee_id=temp.employee_id;
        empF[i].employee_name=temp.employee_name;
        empF[i].phno=temp.phno;
        empF[i].shift=temp.shift;
        empF[i].area_code=temp.area_code;
        i+=1;
    }
    fclose(fp);
}

вот структура сотрудника

typedef struct employee
{
    int employee_id;
    char employee_name[20];
    long int  phno;
    char shift[10];
    int area_code;
}employee;

Кажется, он работает нормально, если я не использую массив структур. Что именно мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вы переопределили имя переменной empF в функции и объявили с типом employee (без массива).

void test(){
    FILE* fp;
    employee empF; /* <-- here */
    /* ... */
}

Итак, когда вы ссылаетесь на empF, вы ссылка на локальную переменную, не являющуюся массивом, внутри функции.

0 голосов
/ 08 мая 2020

Я думаю, вы забыли удалить строку

employee empF;

, когда вы переключились с одного сотрудника на многих. Это объявление отменяет предыдущее объявление массива.

(Кроме того, вам на самом деле не нужен сотрудник temp; вы можете напрямую сканировать до empF[i], но у вас могут быть свои причины :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...