在這裏,我有一個結構定義訪問結構數組:通過指針
typedef struct person {
unsigned int ssn, age, height, weight, income;
char name[MAXS+1], job[MAXS+1], religion[MAXS+1], major[MAXS+1], minor[MAXS+1], gender;
}PERSON;
在這裏,我有一個在功能陣列型的人定義的結構:
PERSON record[MAXR+1];
將如何我將這個數組傳遞給另一個實時更新的函數(即作爲一個指針)?
我的直覺和先驗知識告訴我做到以下幾點:
PERSON *rp[MAXR+1];
for(i=0; i<MAXR; i++){
*rp[i]=&record[i];
}
valid=readfile(fp, rp);
然而,我「在分配不兼容類型」的錯誤提示的。 這樣做的正確方法是什麼?
下面是完整的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAXS 19
#define MAXR 999
typedef struct person {
unsigned int ssn, age, height, weight, income;
char name[MAXS+1], job[MAXS+1], religion[MAXS+1], major[MAXS+1], minor[MAXS+1], gender;
}PERSON;
//get and check ssn
int getssn(){
int num;
printf("\nSSN: ");
scanf("%d", &num);
if(num<=99999999 || num>999999999){
printf("\nPlease input a valid SSN.\n");
return 0;
}
else
return num;
}
int readfile(FILE *fptr, PERSON **rptr){
int v=0, i, j;
for(i=0; i<MAXR; i++){
j=i;
if(fscanf(fptr, "%c\n%d\n%19s\n%d\n%19s\n%d\n%19s\n%19s\n%d\n%d\n%19s\n\n",
&rptr[j]->gender, &rptr[j]->ssn, rptr[j]->name, &rptr[j]->age,
rptr[j]->job, &rptr[j]->income, rptr[j]->major, rptr[j]->minor,
&rptr[j]->height, &rptr[j]->weight, rptr[j]->religion)==EOF)
i=MAXR;
if(&rptr[MAXR]->ssn==&rptr[j]->ssn)
v=j;
}
return v;
}
int main(){
int valid=0, i;
char filename[MAXS]="clients.txt";
FILE *fp;
PERSON record[MAXR+1], *rp[MAXR+1];
do{
record[MAXR].ssn=getssn();
}while(record[MAXR].ssn==0);
printf("Name of file of records: ");
//gets(filename);
if((fp=fopen(filename, "r"))==NULL)
printf("\nCould not open file\n");
else{
printf("\njur doing gohd\n");
for(i=0; i<MAXR; i++){
*rp[i]=&record[i];
}
valid=readfile(fp, rp);
if(valid==0){
printf("\nSSN %d is not found in file %s.\n", record[MAXR].ssn, filename);
}
else {
printf("%d", valid);
}
}
return 0;
}
謝謝,這個工作,現在在我腦海中是有道理的。 – Kabir 2011-05-23 13:57:38
很高興聽到:) – MByD 2011-05-23 14:03:35