Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Посимвольное чтение текстового файла


Автор: Lacoste1024 25.12.2011, 20:07
Задача следующая: написать на С программу, удаляющую лишние пробелы в текстовом файле. Начал с такого подхода: считывать каждый символ и проверять некоторые условия т.е. читать файл посимвольно. Начал с того, что попробовал весь входной текстовый файл посимвольно переписать в выходной. 
Код

#include <stdio.h>
int main()
{
    char c;
    FILE *input, *output;
    
    input = fopen("input.txt", "r");
    output = fopen("output.txt", "w");
    while (!feof(input)) {
        fscanf(input, "%c", &c);
        fprintf(output, "%c", c);
    }
    fclose(output);
    fclose(input);
    return 0;
}

Но в итоге файл output.txt пуст. Пишу в ubuntu в geany. При компилировании в консоли пишу gcc -o trim main.c. 
Знаю про существование построчного чтения файла и затем обработки строки, но это не очень рациональный способ

Автор: Lacoste1024 25.12.2011, 20:56
Тему можно считать закрытой. Нашёл ответ)
Код

#include <stdio.h>

int main()
{
    int space = 0;
    char c;
    FILE *fin, *fout;
    
    fin = fopen("input", "r");
    fout = fopen("output.txt", "w");
    while ((c = fgetc(fin)) != EOF) {
        if (c != ' ') space = 0;
        else space++;
        if (space <= 1) fputc(c, fout);
    }
    fclose(fout);
    fclose(fin);

    return 0;
}


Автор: volatile 25.12.2011, 23:23
Lacoste1024, Программка будет очень медленно работать.
Не помешало бы сделать буферизованные чтение/запись. Скорость увеличится, причем очень конкретно, в десятки/сотни раз.

Автор: gromo 25.12.2011, 23:30
не совсем понял зачем вообще читать посимвольно, ...

Автор: bsa 26.12.2011, 00:29
Lacoste1024, раз ответ на вопрос получен, то пометь тему решенной

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)