Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++.Курсач. Шаблоны форматирования. Нужны идеи

48K
21 декабря 2009 года
Akord
20 / / 06.12.2009
Эта программа работает. Но мне не хватает идей, чтобы сделать ее лучше, или оптимизировать алгоритм например.
Мб у кого нибудь будет что подсказать?

шаблоны форматирования: canonical (K&R) и modern.

Код:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>


int main()
{
    char FileName[30];
    cout << "Please, enter full way to file : ";
    cin >> FileName;
    FILE* WorkFile =fopen(FileName,"r");
    if (!WorkFile)
    {
        cout << "You mistakenned when entering, or this file does not exist.\n";
        system ("pause");
        return(1);
    }
    FILE* TempFile = fopen("c:\\temp.cpp", "w");
    char ch1 = fgetc(WorkFile);
    char ch2 = '\0';
    while(!feof(WorkFile))
    {
        if(( ch1 != '\t') && (ch1 != '\n'))
        {
            if((ch2 != ' ') || (ch1 != ' '))
            {
                fputc(ch1, TempFile);
            }
        }
        ch2 = ch1;
        ch1 = fgetc(WorkFile);
    }
    fclose(WorkFile);
    fclose(TempFile);
    int Pattern;
    cout <<"\n What pattern you want to use?\n Enter 1 - if Kernigan & Richie,\n Enter 2 - if Modern.\n - ";
    cin >> Pattern;
    if ((Pattern != 1) && (Pattern != 2))
    {
        cout << "Incorrect entering.\n";
    }
    cout << Pattern;
    cout << "\n\That to use for formatting?\n Enter 3 for using tabulations.\n Enter 4 for using formatting gap.\n - ";
    int Format;
    cin >> Format;
    if ((Format != 3) && (Format != 4))
    {
        cout << "Incorrect entering.\n";
    }

int prob;
    if (Format == 4)
    {
        cout << "\n With how much gap to work?\n - ";
        cin >> prob;
    }
cout << prob;
    TempFile = fopen("c:\\temp.cpp", "r");
    FILE* OutputFile = fopen("c:\\output.cpp", "w");
    ch1 = fgetc(TempFile);
    ch2 = '\0';
    char ch3 = '\0';
    int z = 0;
    int i;
    int indent = 0;
    int z2;
while(!feof(TempFile))
    {
    if ((ch1 == '(') && (ch3 == '\0'))
        {
            ch3 = ch1;
            fputc(ch1,OutputFile);
            ch2 = ch1;
        }
        else
            if (ch3 != '\0')
            {
                fputc(ch1,OutputFile);
                ch2 = ch1;
                if((ch1 == ')')&&(ch3 == '('))
                {
                    ch3 = '\0';
                    z=1;   
                }
    }
   
            else
            {
                if(ch2 == '\n')
                {
                    if(Format == 4)
                    {
                        for(i = 0; i < indent; i++)
                        {
                            fputc(' ', OutputFile);
                        }
                    }
                    else
                    {
                        for(i = 0; i < indent; i++)
                        {
                            fputc('\t', OutputFile);
                        }
                    }
                }
                char ch4 = '\0';
                switch(ch1)
                {
                    case '>':
                        if(ch2 == 'h')
                        {
                            fputc(ch1,OutputFile);
                            ch1 = fgetc(TempFile);
                            ch1 = '\n';                    
                        }
                        fputc(ch1,OutputFile);
                        ch2 = ch1;
                        break;
                    case ';':
                        fputc(ch1,OutputFile);
                        ch4 = '\0';
                        ch4 = fgetc(TempFile);                     
                        if (ch4 == ' ')
                        {
                            ch4 = fgetc(TempFile);                                                 
                        }
                        if (ch4 == '}')
                        {
                            if(Format == 4)
                            {
                                indent -= prob;
                            }
                            else
                            {
                                indent--;
                            }
                        }
                        ch1 = '\n';
                        fputc(ch1,OutputFile);
                        ch2 = ch1;
                        ch1 = ch4;
                    z2 = 1;
                        break;
                    case '{':
                        if ((Pattern == 2) || (z == 1))      
                        {
                            ch2 = '\n';
                            fputc(ch2,OutputFile);
                            if(Format == 4)
                            {
                                for(i = 0; i < indent; i++)
                                {
                                    fputc(' ', OutputFile);
                                }
                            }
                            else
                            {
                                for(i = 0; i < indent; i++)
                                {
                                    fputc('\t', OutputFile);
                                }
                            }
                        }
                        fputc(ch1,OutputFile);
                        ch4 = fgetc(TempFile);
                        if (ch4 == ' ')
                        {
                            ch4 = fgetc(TempFile);
                        }
                        ch1 = '\n';
                        fputc(ch1,OutputFile);
                        ch2 = ch1;
                        ch1 = ch4;
                        z2 = 1;
                        if(Format == 4)
                        {
                            indent += prob;                    
                        }
                        else
                        {
                            indent++;
                        }
                        break;
                    case '}':
                        fputc(ch1,OutputFile);
                        ch1 = '\n';
                        fputc(ch1,OutputFile);
                        ch2 = ch1;
                        ch4 = fgetc(TempFile);                     
                        if (ch4 == ' ')
                        {
                            ch4 = fgetc(TempFile);                                                 
                        }
                        if((indent > 0) && (ch4 == '}'))
                        {
                            if(Format == 4)
                            {
                                indent -= prob;
                            }
                            else
                            {
                                indent--;
                            }
                        }
                        ch1 = ch4;
                        z2 = 1;
                        break;
                    default:
                        fputc(ch1,OutputFile);
                        ch2 = ch1;
                        break;             
                }
            }
            if (z2 == 0)
            {
                ch1 = fgetc(TempFile);
            }
            else
            {
                z2 = 0;
            }
    }
    fclose(TempFile);
    fclose(OutputFile);
    unlink(name_file2);
    system ("pause");
    return(0);
}
244
22 декабря 2009 года
UAS
2.0K / / 19.07.2006
В программе без комментариев и вообще без описания должны мы разбираться? Нет.
87
22 декабря 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Akord
Эта программа работает. Но мне не хватает идей, чтобы сделать ее лучше...
Мб у кого нибудь будет что подсказать?



1. Со стилем что-то не то - отступы гуляют.
2. Всё написано в одной функции - это мешает восприятию. Например, мне не особо интересно, как вы читаете файл. Можно было засунуть все в функцию типа ReadInputFile.
3. Не используется C++: STL, классы и т.д.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог