c - 从存储在一维和二维数组中的文件中读取逗号分隔值

标签 c arrays string multidimensional-array fopen

我有一个如下代码,它基本上会读取一个内容如下的文件 奥克兰、汉密尔顿、罗托鲁瓦、惠灵顿 0、125、235、660
125、0、110、535 235、110、0、460 660, 535, 460, 0

现在我想做的是分离出第一行并将其存储在字符数组中,从第二行到末尾(基本上是矩阵)存储为二维整数数组,当然用逗号分隔。到目前为止,我已经用逗号分割文件并存储到字符数组中,但无法从数组中获取元素数量(即城市数量)。此外,我刚刚使用 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;   
  }

最佳答案

表达式

sizeof (arr1[j])

返回实际数组的大小,即MAXFLDSIZE,而不是放入其中的条目数。您必须自己使用变量来跟踪这一点。

关于c - 从存储在一维和二维数组中的文件中读取逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12505297/

相关文章:

c++ - 有关虚拟文件夹的文档

c - 超时后如何关闭上下文菜单?

php - MySQLi 多重查询,访问第二个数组

连接两个二维字符数组

java - 将字符串拆分为用户所需的字符数

c# - 将字符串数组从 C# 传递到 C++ dll,然后再返回

c - Linux 中的 itoa 函数在哪里?

c - 为什么在使用 snprintf 时会出现此代码的段错误?

PHP - 是否可以对数字数组进行哈希处理?

c# - 删除字符串的特定部分