我的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]) 但我无法将数字读入2D数组。这样做的最佳方法是什么?
答案 0 :(得分:0)
(旁注:CSV表示comma-separated values;您的文件不是CSV格式)
如果您知道阵列的尺寸,并且不需要进行错误检查,则可以使用fscanf
。
以下内容将跳过一个单词(由空格分隔)。使用它来跳过实际需要的数字之前的冗余名称。
fscanf(file, "%*s");
以下将读取一个数字:
int distance;
fscanf(file, "%d", &distance);
将这些组合在一个循环中,并进行适当的计数,您将获得数据。
注意:以上是一个快速而肮脏的解决方案。 会在您的文件或读取它的代码中出现错误,并fscanf
makes it hard to handle errors。您应该了解如何在C中使用fgets
和split a string。