#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);
}
C++.Курсач. Шаблоны форматирования. Нужны идеи
Мб у кого нибудь будет что подсказать?
шаблоны форматирования: canonical (K&R) и modern.
Код:
В программе без комментариев и вообще без описания должны мы разбираться? Нет.
Цитата: Akord
Эта программа работает. Но мне не хватает идей, чтобы сделать ее лучше...
Мб у кого нибудь будет что подсказать?
Мб у кого нибудь будет что подсказать?
1. Со стилем что-то не то - отступы гуляют.
2. Всё написано в одной функции - это мешает восприятию. Например, мне не особо интересно, как вы читаете файл. Можно было засунуть все в функцию типа ReadInputFile.
3. Не используется C++: STL, классы и т.д.