Есть такая, но она не работает.. по крайней мере у меня.
Напишите программу, убирающую все комментарии из любой Си-программы. Не забудьте должным образом обработать строки символов и строковые константы. Комментарии в Си не могут быть вложены друг в друга.
int main()
{
int c;
char file_name[20];
char out_file_name[20];
in = fopen ("C:\\Programma\\file_name.txt", "rb"); /*открываем входной файл*/
if (in==NULL)
{
printf("File not open\n");
exit (1);
}
else
printf("File open\n");
out = fopen ("C:\\Programma\\out_file_name.txt", "wb"); /*открываем выходной файл*/
if (out==NULL)
{
printf("File not open\n");
exit (1);
}
else
printf("File open\n");
while((c = fgetc(in)) != EOF) //пока не закончился файл читаем его
{
find_comment(c);//выполняем часть кода написанного в структуре find_comment
}
fclose(in);// закрываем файл
fclose(out);//закрываем файл
return 0;
}
/*поиск комментариев*/
void find_comment(int c)
{
int d;
if(c=='/') //если при считывание файла мы дошли до / то выполняем следующую проверку
if((d = fgetc(in)) =='*')// если после / стоит *, то
in_comment(); // выполняем структуру in_comment
else if(d=='/') //если после / стоит еще один /, то
in_short_comment(); //выполняем структуру in_short_comment
else //иначе
{
fputc(c, out);// переписываем значение переменной в файл out
fputc(d, out);// переписываем значение переменной в файл out
}
else // иначе
fputc(c, out);// переписываем то что прочитали в файл out
}
/*внутри длинного комментария*/
void in_comment(void)
{
int c, d;
c=fgetc(in);// читаем строку из файла и записываем ее в переменную
d=fgetc(in);//читаем строку из файла и записываем ее в переменную
while(c != '*' || d != '/')// читаем файл до тех пор, пока не наткнемся на символ * или /, до тех пор выполняем действия написанные ниже
{
c=d; //перезаписываем значение d в c
d=fgetc(in); // читаем новую строку из файла в переменную d
}
}
/*внутри короткого комментария*/
void in_short_comment(void)
{
int c;
c=fgetc(in);// читаем строку в переменную
while(c != '\n') //пока с не равно новой строке
c=fgetc(in); // читаем новую строку в переменную
fputc('\n', out); // и записываем то что прочитали из файла после знака новой строки, т.к. все что было до него было комментарием.
}