Как мне игнорировать символы после определенного места в каждой строке на C?

#c #file-io

#c #файл-ввод-вывод #file-io

Вопрос:

Я пытаюсь ввести текстовые файлы в свою программу на C, которые выглядят примерно так

 123 x 182   //this is a comment in the file
1234 c 1923  //this is another comment in the file
12 p 3      //this is another comment in the file
  

Мне нужно сохранить int, одиночный символ и другой int в каждой строке, а затем я хочу игнорировать все остальное в строке. Вот что я попробовал….

 while (fscanf(file, "%d %c %d", amp;one,amp;two,amp;three) !=EOF)
                {
                        printf("%d %c %dn", one,two,three);
                }
  

Прямо сейчас я просто распечатываю значения, чтобы протестировать процесс. Итак, если я протестирую это с файлом, в котором нет никаких комментариев или дополнительного материала после первых 3 вещей, которые мне нужны, это сработает отлично. Но если есть лишний материал, я застреваю в бесконечном цикле, где первая строка печатается повторно.

Ответ №1:

В C может быть лучший способ, но вы могли бы добавить цикл внутри вашего текущего цикла для чтения оставшихся символов, пока не нажмете на новую строку.

 while (fscanf(file, "%d %c %d", amp;one,amp;two,amp;three) !=EOF)
{
     printf("%d %c %dn", one,two,three);
     while(fgetc(file) != 'n'){};
}
  

Это должно прерваться из вложенного цикла while, как только полученный символ будет новой строкой, и следующий fscanf начнется со следующей строки.

Ответ №2:

Если ваш libc поддерживает POSIX 2008 (как, по крайней мере, glibc в Linux), вы можете использовать getline и sscanf:

 int len;
char *line;
while (getline(amp;line, amp;len, file) != -1) {
    sscanf(line, "%d %c %d", amp;one, amp;two, amp;three);
    printf("%d %c %dn", one,two,three);
    ...
}