Как игнорировать символы после определенного места в каждой строке в C? - PullRequest
1 голос
/ 13 апреля 2011

Я пытаюсь ввести txt-файлы в мою 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", &one,&two,&three) !=EOF)
                {
                        printf("%d %c %d\n", one,two,three);
                }

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

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

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

int len;
char *line;
while (getline(&line, &len, file) != -1) {
    sscanf(line, "%d %c %d", &one, &two, &three);
    printf("%d %c %d\n", one,two,three);
    ...
}
0 голосов
/ 13 апреля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...