C跳过线以'#'开头

时间:2013-09-20 15:48:14

标签: c

我尝试读取文件并使用fscanf来获取一些值并将其存储在数组中,但是在文件中,会有一些行以“#”开头(例如#this只是一个命令),而我想要跳过它们我应该怎么做?那些包含#的行会出现在随机行中。我的代码在这里得到了一些:

//do line counts of how many lines contain parameters 


while(!EOF) {
      fgets(lines, 90, hi->agentFile);
      count++;
      if (lines[0] == '#') {
          count--;
      }
  }
   //mallocing an array of struct.
  agentInfo* array = malloc(count*sizeof(agentInfo));
  for (i = 0; i < count; i++) {
      fscanf(hi->agentFile,"%d %d %c %s %c",&array[i].r,&array[i].c,
              &array[i].agent_name,&array[i].function[80],
              &array[i].func_par);

所以我需要添加一些东西,所以我可以跳过以'#'开头的行,怎么样?

1 个答案:

答案 0 :(得分:3)

您的EOF测试错误。您还需要在fgets()循环和fscanf()循环之间回放文件。您需要使用fscanf()fgets()循环替换为第二个sscanf()循环来读取数据。或者您需要在读取文件时分配内存。我们暂时离开,但是:

while(fgets(lines, sizeof(lines), hi->agentFile) != EOF)
{
      if (lines[0] != '#')
          count++;
}
agentInfo *array = malloc(count*sizeof(agentInfo));
if (array != 0)
{
    int i;
    rewind(hi->agentFile);
    for (i = 0; fgets(lines, sizeof(lines), hi->agentFile) != EOF && i < count; i++)
    {
        if (lines[0] != '#')
        {
            if (sscanf(lines, "%d %d %c %s %c",&array[i].r,&array[i].c,
                     &array[i].agent_name,&array[i].function[80],
                     &array[i].func_par) != 5)
                ...format error in non-comment line...
        }
    }
    assert(i == count);  // else someone changed the file, or ...
}

请注意,这会检查内存分配错误以及非注释行的格式错误。