0

基本的に、オークランド、ハミルトン、ロトルア、ウェリントン 0、125、235、660 125、0、110、535 235、110、0、460 660、535、460 のような内容のファイルを読み取るコードを以下に示します
。 , 0

今私がやりたいことは、最初の行を分離して文字配列に格納し、2 行目から最後まで (基本的に行列) を 2 次元整数配列に格納し、もちろんコンマで分割することです。これまでのところ、ファイルをコンマで分割し、文字配列に格納しましたが、配列から要素の数 (つまり、都市の数) を取得できませんでした。さらに、最初の行を読み取るために fgets を使用しました。これを行う他の効率的な方法はありますか?ありがとうございました。

 #include <stdio.h>
 #include <stdlib.h> 
 #include <string.h>
 #define MAXFLDS 200 
 #define MAXFLDSIZE 32
 void parse( char *record, char *delim, char arr[MAXFLDS][MAXFLDSIZE],int *fldcnt)
 {
char*p=strtok(record,delim);
int fld=0,fld1=0;
while(p)
{
    strcpy(arr[fld],p);
    fld++;
    p=strtok('\0',delim);
}   
*fldcnt=fld;
  }
  int main(int argc, char *argv[])
  {
char tmp[1024];
int fldcnt=0;
int j=0,k=0;
char arr[MAXFLDS][MAXFLDSIZE],arr1[MAXFLDS][MAXFLDSIZE];
int recordcnt=0;    
FILE *in=fopen("C:\\Users\\Sharan\\Desktop\\cities.txt","r"); 
if(in==NULL)
{
    perror("File open error");
    exit(EXIT_FAILURE);
}
fgets(tmp,sizeof(tmp),in);
parse(tmp,",",arr1,&fldcnt);
k=sizeof(arr1)/sizeof(arr1[0]);
printf("arr size:%d",k);
for(j=0;j<fldcnt;j++)
{
    printf("cities:%d\n",sizeof (arr1[j]));
}

while(fgets(tmp,sizeof(tmp),in)!=0)
{
    int i=0,j=0;
    recordcnt++;
    parse(tmp,", ",arr,&fldcnt);
    for(i=0;i<fldcnt;i++)
    {
        printf("%s\n",arr[i]);
    }
}
fclose(in);
return 0;   
  }
4

1 に答える 1

1

表現

sizeof (arr1[j])

実際の配列のサイズを返します。つまりMAXFLDSIZE、配列に入力したエントリの数ではありません。変数を使用して自分で追跡する必要があります。

于 2012-09-20T05:38:25.280 に答える