读取文件时忽略注释

时间:2012-10-19 12:29:49

标签: c

我意识到这是一个非常简单的问题,我希望能够通过在互联网上搜索找到答案,但我不能。 我想要做的只是在文件中读取,但忽略以哈希开头的注释。 所以

FILE *fp_in;
if((fp_in = open("file_name.txt","r")) ==NULL) printf("file not opened\n");
const int bsz = 100; char buf[bsz];
fgets(buf, bsz, fp_in);  // to skip ONE line
while((fgets(buf,bsz,fp_in))! ==NULL) {
  double x,y,x;
  sscanf(buf, "%lf %lf %lf\n", &x,&y,&z);
  /////allocate values////
}

所以可以跳过文件中的1行,但是我有几行的文件由我需要跳过的散列键继续。有人可以帮我这个,我似乎无法找到答案。 干杯

3 个答案:

答案 0 :(得分:1)

if (buf[0] == '#') continue;添加到循环的开头。

答案 1 :(得分:0)

如果评论标记是该行中的第一个字符,

while((fgets(buf,bsz,fp_in))! ==NULL) {
  if (buf[0] == '#') continue;
  double x,y,x;
  sscanf(buf, "%lf %lf %lf\n", &x,&y,&z);
  /////allocate values////
}

会忽略评论行。如果不是那么简单,那么就无法避免扫描该行以征求意见。

答案 2 :(得分:0)

FILE *fp_in;
int chr;
if((fp_in = fopen("file_name.txt","r")) == NULL){
   printf("File not opened\n");
   exit(1);
}

while((chr = fgetc(fp_in) != EOF){
    if(chr == '#'){
       while((chr = fgetc(fp_in)) != '#' || (chr != EOF)); /*skip*/
    }
  //do the processing.
}