Я создал ниже программу для чтения данных, разделенных запятыми из файла, а затем вставляю их в структуры. Существует функция, называемая struct person insert_into_struct(char line[])
. Когда я компилирую это, что функция в последний цикл p.Id[j]=line[i];
получил ошибкуСтрока 90: индексированное значение не является ни массивом, ни указателем, ни вектором
line 90 error: subscripted value is neither array nor pointer nor vector
Это код
#include<stdio.h>
#include<string.h>
struct person{
char name[100];
char address[100];
int Id;
};
struct person insert_into_struct(char line[]);
int main(int argc,char *argv[]){
FILE *fp1;
fp1=fopen(argv[1],"r");
char ch;
char line[100];
int i=0;
struct person person_arry[100];
int linenum=0;
if(fp1==0)
{
printf("Error\n");
}
else
{
while((ch=fgetc(fp1))!=EOF){
switch(ch){
case '\n':
line[i]='\0';
person_arry[linenum]=insert_into_struct(line);
printf("line:%d, name: %s, address: %s, id: %s\n",
linenum,
person_arry[linenum].name,
person_arry[linenum].address,
person_arry[linenum].Id);
linenum++;
i=0;
break;
default:
line[i]=ch;
i++;
}
}
}
return 0;
}
struct person insert_into_struct(char line[]){
int i,j=0;
// now we have to declare a temp structre to hold the seperated values
struct person p;
//now split the values one by one.
//first copy the name from line[] into p.name
for(i=0; line[i]!=',';i++, j++){
p.name[j]=line[i];
}
i++;
p.name[j]='\0';
//printf("name=%s\n", p.name);
//second copy the address in line[] to p.address[]
for(j=0 ; line[i]!=',';i++, j++){
p.address[j]=line[i];
}
i++;
p.address[j]='\0';
//printf("address=%s\n", p.address);
// Erroneous line:
//third copy the id in line[] to p.id[]
for(j=0 ; line[i]!='\0';i++, j++){
p.Id[j]=line[i];
}
p.Id[j]='\0';
//printf("Id=%s\n", p.Id);
return(p);
}
Вы пытаетесь сохранить 'Id' как строку символов. Сохраните его как 'int'. (Это предположение. Мне не хотелось подсчитывать, чтобы найти эту легендарную «линию 90».) – usr2564301
Вам не нужно считать это. Вернитесь к элементу struct insert_into_struct (char line []), а затем запустите для него цикл. –
Ну, я догадался, потому что эта строка содержит 'p.Id [j]' - где вы пытаетесь получить доступ к 'int Id' как указатель, массив или вектор". – usr2564301