Как читать в файле, но пропустить символы после #? - PullRequest
0 голосов
/ 28 февраля 2020

Проблемы с чтением в файле в c. Я искал в Интернете, так как я новичок в программировании, но все же у меня есть проблема с выводом моего файла.

int main( int argc, char *argv[]){
    FILE *in;
    int chr;

    if(in = fopen("airmap1.map", "r")) == NULL){
        printf("Could not open file\n");
        exit(1);

    while(fgets(row, sizeof(row),in) !=NULL){
            if (*row == '#') //next row
            continue;
            fscanf(in, "%*[^\n]s , %[]s", row); 
    }
}

Файл, в котором я хочу прочитать, выглядит следующим образом:

#animals at the zoo
cat dog #cat-dog
fish frog #fish-frog

Я хочу игнорировать комментарии после этого знака #, но моя проблема в том, что мой код игнорирует только первое слово после #. Но сейчас он дает мне такой вывод:

cat frog 
dog fish


Как я могу решить эту проблему? Вместо этого я хотел бы получить следующую форму:

cat dog
fish frog

1 Ответ

0 голосов
/ 28 февраля 2020

Вы можете использовать функцию, которая проверяет наличие "#" в каждой строке файла, а затем копировать ее в другую строку.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define commentSign '#'
#define bufferLength 255

int findPosOfChar(char * buffer, char charToFind, int length)
{
  int i;
  for(i = 0 ; i < length ; i++)
  {
    if(buffer[i] == charToFind)
      return i;
  }

  return 0;
}

int main( int argc, char *argv[]){
  FILE* filePointer = fopen("test", "r");
  char buffer[bufferLength];
  char *p = malloc(sizeof(char) * 255);
  int commentPos;

  while(fgets(buffer, bufferLength, filePointer)) {
      commentPos = findPosOfChar(buffer, (char)commentSign, bufferLength);
      memcpy(p, buffer, commentPos);
      p[commentPos] = '\0';

      printf("%s\n", p);
  }

  fclose(filePointer);
}
...