Как избежать пустых файлов - PullRequest
0 голосов
/ 05 ноября 2018

Я пишу код на C, пытаясь избежать пробелов в файле. Я просто хочу рассчитывать по одному на каждое вхождение составных пробелов.
Например, если у меня есть что-то вроде этого:
This is just a test
Заполните любые пробелы, такие как '\n', ' ' или \t между этими словами. Я пробовал это:

if( (current_c == ' ') || (current_c == '\t') || (current_c == '\n') ){
            blank_counter++;
            do{
                fgetpos(file, &position);
            } while( (fgetc(archivo) == ' ') || (fgetc(archivo) == '\t') || (fgetc(archivo) == '\n') );
            fsetpos(file, &position);
            \***********************************************
            *******This is just debugging block*************
            printf("The current char: %c\n", current_c);
            fputc(c, file);
            ************************************************\
        }

Как вы можете заметить, приведенная выше функция является лишь частью. В начале у меня есть первая инструкция:
while( (current_c = fgetc(file)) != EOF )
И для работы с fsetpos() и fgetpos() декларативным fpos_t position;.
У меня небольшие проблемы. Если вы запустите код, вы можете получить ошибку. Когда вхождение '\n', указатель не распознает его.
Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 05 ноября 2018

Если вам нужно посчитать количество последовательностей одного или нескольких символов пробела, табуляции или новой строки, тогда код в основном тривиален:

FILE *archivo = …
int c;
int blank_counter = 0;
while ((c = getc(archivo)) != EOF)
{
    if (c == ' ' || c == '\t' || c == '\n')
    {
        blank_counter++;
        while ((c = getc(archivo)) != ' ' && c != '\t' && c != '\n')
            ;
    }
}

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

...