progrmme

help

напишите программу, убирающую все комментарии из любой си-программы
/*удаление комментариев из Си файла*/

#include <stdio.h>

void find_comment(int c);
void in_comment(void);
void in_short_comment(void);
FILE *in, *out;


int main()
{
int c;
char file_name[20];
char out_file_name[20];

printf("Введите имя входного файла: ");
gets(file_name);
in = fopen(file_name,"rb");//Открыть файл для чтения
if((in = fopen(file_name, "rb")) == NULL)
{
perror(file_name);
return 1;
}
printf("Введите имя выходного файла: ");
gets(out_file_name);
out = fopen(out_file_name, "wb");//открыть файл для записи
while((c = fgetc(in)) != EOF)
{
find_comment(c);
}
fclose(in);
fclose(out);
return 0;
}

/*поиск коментариев*/
void find_comment(int c)
{
int d;
if(c=='/')
if((d = fgetc(in)) =='*')
in_comment();
else if(d=='/')
in_short_comment();
else
{
fputc(c, out);
fputc(d, out);
}
else
fputc(c, out);
}

/*внутри длинного комментария*/
void in_comment(void)
{
int c, d;
c=fgetc(in);
d=fgetc(in);
while(c != '*' || d != '/')
{
c=d;
d=fgetc(in);
}
}

/*внутри короткого комментария*/
void in_short_comment(void)
{
int c;
c=fgetc(in);
while(c != '\n')
c=fgetc(in);
fputc('\n', out);
}
Есть такая, но она не работает.. по крайней мере у меня.
Напишите программу, убирающую все комментарии из любой Си-программы. Не забудьте должным образом обработать строки символов и строковые константы. Комментарии в Си не могут быть вложены друг в друга.

#include <stdio.h>

#define BUFSIZE 10000 /* максимальный размер буфера ввода + 1 */

int getbuffer(char line[], int maxline);
void decomment(char to[], char from[])
{
int i, j, c;
int cf, qf;

i = j = 0;
cf = qf = 0;
while ((c = from[i]) != '\0') {
if (c == '"') {
if (qf == 0)
qf = 1;
else
qf = 0;
to[j] = from[i];
++j;
}
else if (c == '/' && from[i+1] == '*' && cf == 0 && qf == 0) {
cf = 1;
++i;
}
else if (c == '*' && from[i+1] == '/' && cf == 1 && qf == 0) {
cf = 0;
++i;
}
else if (cf == 0) {
to[j] = from[i];
++j;
}
++i;
}
}
имя входного и выходного файла, это что за имена и где их брать?
/*удаление комментариев из Си файла*/

#include <stdio.h>
#include <stdlib.h>

void find_comment(int c);
void in_comment(void);
void in_short_comment(void);
FILE *in, *out;


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); // и записываем то что прочитали из файла после знака новой строки, т.к. все что было до него было комментарием.
}
Topic archived. No new replies allowed.