我目前正在开发一个程序,该程序读取此文本文件(从意大利语翻译)并将行存储在单链接列表中。但是我不得不忽略评论。注释以“#”开头。在清单的节点中,我必须具有成分,辛博尔和数量,且无注释。
Input file:
#ingredients for donut
milk l 0.25
flour g 300
oil l 0.05 # a spoon
eggs u 2
butter g 50
yogurt g 50 # white yogurt
# enjoy your meal
struct nodo {
char ingredient[15];
char simbol[2];
float quantity;
struct nodo * next;
};
我尝试了一些代码,现在我陷入了这个问题(读取功能):
struct nodo * read (struct nodo * top) {
FILE *fp;
fp = fopen("ingredients.txt", "r");
char comment[30];
char comm;
while(!feof(fp)) {
fscanf(fp, "%c", &comm);
if(comm == '#') {
fgets(comment, 30, fp);
}
struct nodo * new = CreaNodo();
fscanf(fp, "%s%s%f", new->ingredient, new->simbol, &new->quantity);
if(!top) top = new;
else {
new->next = top;
top = new;
}
}
fclose(fp);
return top;
}
答案 0 :(得分:0)
第二个fscanf没有非注释行的第一个字符(在comm变量中丢失了)。
fgets()对每一行进行搜索,然后在该行中搜索“#”,如果没有找到,则sscanf()对这一行进行搜索(我认为)更容易,并且可能会提高I / O效率。