从c中的文件读取文本,并忽略“一些注释”

时间:2020-09-27 13:56:07

标签: c list text

我目前正在开发一个程序,该程序读取此文本文件(从意大利语翻译)并将行存储在单链接列表中。但是我不得不忽略评论。注释以“#”开头。在清单的节点中,我必须具有成分,辛博尔和数量,且无注释。

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;
}

1 个答案:

答案 0 :(得分:0)

第二个fscanf没有非注释行的第一个字符(在comm变量中丢失了)。

fgets()对每一行进行搜索,然后在该行中搜索“#”,如果没有找到,则sscanf()对这一行进行搜索(我认为)更容易,并且可能会提高I / O效率。