我的 csv 文件包含以下内容:
BP BCS DEB EG GY KAP KEC MI
BP 0 216 511 311 22 23 242 550
Bekescsaba 216 0 23 34 11 345 23 42
Debrecen 511 642 0 124 31 124 123 315
Eger 311 1351 31 0 342 532 211 134
Gyor 22 135 341 431 0 134 23 312
Kaposvar 23 14 24 341 14 0 15 32
Kecskemet 242 241 241 135 14 15 0 231
Miskolc 550 24 4 12 352 124 123 0
我想将数字读入数组。问题是,我怎样才能做到这一点,同时也跳过第一个字符串?
这是读取所有内容的代码:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#include <time.h>
#define MAX 1024
void main() {
FILE *f;
float r;
int i, j;
char line[1024];
char city[MAX];
int mtx[20][20];
int szam[50];
char *cities[9] = {"Budapest", "Bekescsaba", "Debrecen", "Eger", "Gyor", "Kaposvar", "Kecskemet", "Miskolc"};
f = fopen("/home/dumika/Desktop/asd.csv", "r");
if(!f) printf("File opening problem!");
//fgets(line, 1024, f);
while(fscanf(f, "%s", city) != EOF)
{
printf("%s \n", city);
}
}
关于如何实际管理 C 上的 csv i/o 的信息很少。实际任务是要求用户输入两个城市,并计算距离。 我要做的就是读取矩阵中的数字,并将城市放入指针数组中。用户写入,例如布达佩斯(索引 0)和埃格尔(索引 3),距离将为 311。(mtx[0][3]) 但我无法将数字读入二维数组。最好的方法是什么?
最佳答案
(旁注:CSV 表示 comma-separated values ;您的文件不是 CSV 格式)
如果您知道数组的维度,并且不需要错误检查,则可以使用 fscanf
。
以下内容将跳过一个单词(以空格分隔)。使用它可以跳过您实际需要的数字之前的冗余名称。
fscanf(file, "%*s");
下面将读取一个数字:
int distance;
fscanf(file, "%d", &distance);
将它们组合在一个循环中,并进行适当的计数,您将获得数据。
<小时/>注意:上面是一个快速而肮脏的解决方案。您将在您的文件或读取该文件的代码中出现错误,并且fscanf
makes it hard to handle errors 。您应该学习如何使用 fgets
和 split a string在 C 中。
关于c - 如何从 CSV 文件读入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575129/