【发布时间】:2019-12-10 07:56:57
【问题描述】:
我有一个点文件,我需要使用 C 将其解析为图形结构。
我的 dot 文件包含 2 个块,用双 \n 分隔:
一个是垂直的
另一个是边
我已经尝试过使用 fgets,因为它会一直读取到 \n 为止。计算verticles的数量是有帮助的,但不是计算它之后的内容。我不知道我该怎么做
现在我有这样的功能(不完整)
int graphe_charger_dot(graphe *g, char *nom_fichier) {
FILE * f;
int n;
if ((f = fopen(nom_fichier, "r")) == 0) {
puts(nom_fichier);
puts("Erreur d'ouverture du fichier");
return -1;
}
char buffer[500];
fgets(buffer, sizeof(buffer),f);
;
if (strcmp(buffer, "graph {\n") != 0) {
puts("Erreur de compatibilité de fichier");
puts(nom_fichier);
return -1;
}
puts("Fichier ouvert et compatible");
puts("Lecture du buffer 1");
// reads the first verticles. the atoi is just here to test if i can convert an char to integer even with a non integer right after it.
fgets(buffer, sizeof(buffer),f);
n = atoi(buffer);
g->n += 1;
return 0;
}
我的点文件
graph {
0;
1;
2;
3;
4;
5;
6;
7;
8;
0 -- 1;
0 -- 4;
0 -- 5;
0 -- 6;
0 -- 8;
1 -- 2;
1 -- 3;
1 -- 4;
1 -- 5;
2 -- 3;
2 -- 4;
2 -- 5;
2 -- 8;
3 -- 7;
5 -- 7;
5 -- 8;
6 -- 8;
7 -- 8;
}
以及图的结构
struct s_graphe {
int n; /* number of verticles */
int m; /* number of edges */
int adj[GRAPHE_ORDRE_MAX][GRAPHE_ORDRE_MAX];
/* Adjacency matrix of the graph */
};
【问题讨论】:
-
如果
fget()返回一个等于"\n"的字符串,那么你读取的是一个空行。 -
@Barmar 是正确的。另一种方法是
getc,然后如果下一个字符不是另一个换行符,则使用ungetc将其放回原处。