Тема: Робота програми з внутрішніми і зовнішніми данними.
Програма повинна зчитувати строку, яку вписує користувач, знаходити слова з непарною кількістю літер і подвоювати в них середню.
Виникло питання, як переробити цю програму так, щоб вона непрацювала з зовнішніми данними, (input.txt та output.txt), а вписувати слово в консолі і отримувати результат. Буду вдячний за конструктивну відповідь і за приклад.
З.І Прошу вибачення за російську в коді.
    #include <fstream> // Библиотека для работы с файлами
    #include <iostream> // Библиотека ввода-вывода
    #include <string.h> // Библиотека для работы со строками
     
    using namespace std;
     
    char word[30]; // Сюда будет сохраняться по одному слову
    char buffer[500000]={NULL}; // Сюда вводится текст
    char new_buffer[500000]={NULL}; // Сюда сохраняется новый текст, по ходу выполнения программы
    int i; // Счетчик для текущего буфера
    int n; // Счетчик для нового буфера
    int j; // Счетчик длины слова
    int flag=0; // Флаг для проверки
     
    void find_word(void) // Функция, которая ищет одно слово среди пробелов, запятых и прочих знаков
    {
        int count_func=0;
        while((buffer[i]>=65 && buffer[i]<=90) || (buffer[i]>=97 && buffer[i]<=122)) // Условие основывается на кодах ASCII
        {
            word[count_func]=buffer[i];
            ++count_func; ++i; ++j;
        }
    }
    void insert_space(void) // Функция, которая восполняет все пробелы и прочие знаки, которые были введены
    {
        while((buffer[i]<65) || (buffer[i]>=91 && buffer[i]<=96) || (buffer[i]>=123 && buffer[i]<=190))
        {
            new_buffer[n]=buffer[i];
            ++n; ++i;
            if(buffer[i]=='\0')
                return;
        }
    }
     
    void double_letter(void) // Функция, которая удваивает букву по центру
    {
        int y=(j-1)/2;
        int f=0;
        if((j>4)&&(j%2!=0))
        {
            for(f=0; f<=y; f++,++n)
            {
                new_buffer[n]=word[f];
            }
            new_buffer[n]=word[f-1];
            while(f<j)
            {
                new_buffer[n+1]=word[f];
                ++n; ++f;
            }
            ++n;
        }
        if((j<4)&&(j%2!=0))
        {
            if(j==1)
            {
                new_buffer[n]=word[f];
                ++n;
                new_buffer[n]=word[f];
                ++n; ++f;
            }
            if(j==3)
            {
                new_buffer[n]=word[f];
                ++n; ++f;
                new_buffer[n]=word[f];
                ++n;
                new_buffer[n]=word[f];
                ++n; ++f;
                new_buffer[n]=word[f];
                ++n; ++f;
            }
        }
        if(j%2==0)
            for(int v=0; v<j; v++, n++)
            {
                new_buffer[n]=word[v];
            }
    }
     
    void end(void) // Функция, которая проверяет закончился ли текст или нет
    {
        for(int k=0; k<10; k++)
        {
            if((buffer[i+k]>=65 && buffer[i+k]<=90) || (buffer[i+k]>=97 && buffer[i+k]<=122))
            {
                flag=1;
                return;
            }
        }
    }
     
    int main(int argc, const char * argv[])
    {
        ifstream in;
            ofstream out;
        in.open("input.txt"); // Привязка файла инпут
            out.open("output.txt"); // Привязка файла отпут
        in.getline(buffer, 500000, EOF); // Функция считывания из файла инпут
        while(buffer[i+1]!=EOF)
        {
            insert_space();
            find_word();
            double_letter();
            insert_space();
            end();
            if(flag==0)
            {
                break;
            }
            j=0; flag=0;
        }
        for(int f=0; f<=n; f++)
            out << new_buffer[f];
        return 0;
    }