【发布时间】:2019-06-27 21:20:24
【问题描述】:
我想从 .csv 文件中获取数值并将它们存储在一个数组中。我的尝试可以在这里看到:
FILE *ifp;
ifp = fopen(DIREC,"r");
if(ifp == NULL){
fprintf(stderr,"Input file not read.\n");
exit(1);
}
int rows = 0;
int columns = 0;
rows = readParts(ifp);
fseek(ifp, 0, SEEK_SET);
columns = readConfigs(ifp);
fseek(ifp, 0, SEEK_SET);
char arr[rows][columns];
arr[rows][columns] = malloc(sizeof(int)*rows*columns);
for (int i=0; i < rows; ++i){
while(!feof(ifp)){
int count = 0;
int c = fgetc(ifp);
if(c == '\n'){
break;
}
if(isdigit(c)){
arr[i][count] = c;
count++;
}
}
}
printf("First entry: %d", arr[0][0]);
fclose(ifp);
但是,我在使用 fgetc() 读取整数值时遇到问题。我知道它正在抓取数字,因为 printf("%c",c); 返回正确的结果。但是,将c 分配给arr 时,我没有分配正确的值,因为fgetc() 不会返回实际的字符值。我尝试投射(int) c,但它没有改变任何东西。我查看了fnscanf(),但我不确定这将如何工作,因为我的 .csv 文件还包含非数字。有没有使用fgetc() 将整数值分配给数组的正确方法?
【问题讨论】:
-
当今大多数系统使用ASCII encoding (link) 或UTF-8(这是ASCII 的超集)。因此,例如,文件中看起来像零的实际上是十进制数字 48。要将数字从 ASCII 转换为数值,请使用
arr[i][count] = c - '0'; -
这是错误的有几个原因:
arr[rows][columns] = malloc(sizeof(int)*rows*columns);. -
你不需要调用
malloc(),声明char arr[rows][columns]在本地为数组分配空间。 -
使用
fgets()读取整行,然后使用sscanf()解析数字。