23
Мар
2013

Удалить комментарии из программы на языке Си

Помогите, пожалуйста, разобраться с одним косяком в этой программе... Проблема в том, что многострочные комментарии не удаляются, а по идее должны...

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

const int N=100;

void main ()
{
char symbol;
char symbol_temp;
char input_name[N], output_name[N];
setlocale(LC_ALL, "Russian");

printf ("Введите название входного файла! \n");
scanf ("%s", &input_name);
printf ("\n");

FILE *input_file=fopen(input_name, "r+");

if(input_file == NULL) 
{ 
    printf("Ошибка открытия файла.\n\n");
    exit(1);
}

printf ("Введите название выходного файла! \n");
scanf ("%s", &output_name);
printf ("\n");

FILE *output_file=fopen(output_name, "w");

if(output_file == NULL) 
{ 
    printf("Ошибка создания файла.\n\n");
    exit(1);
}

while (!feof(input_file))
{
    symbol=fgetc(input_file);
    if (symbol=='"')
    {
        do
        {
            fprintf(output_file,"%c", symbol);
            symbol = fgetc(input_file);
        }
        while ( (symbol!='"')&&(!feof(input_file)) );
    }
    else
    {
        if (symbol == '/')
        {
            symbol = fgetc(input_file);
            if (symbol == '/')
            {
                {
                    do
                    {
                        symbol = fgetc(input_file);
                    }
                    while ((symbol!='\n')&&(!feof(input_file)));
                    fprintf(output_file,"%c",'\n');
                    continue;
                }
            }

            else
            {
                if (symbol == '*')
                {
                    symbol_temp=fgetc(input_file);
                    do
                    {
                        symbol=symbol_temp;
                        symbol_temp=fgetc(input_file); 
                    }
                    while ( (symbol!='*')&&(symbol_temp!='/')&&(!feof(input_file)) );
                    continue; 
                }

                else
                {
                    fprintf(output_file,"%c", '/');
                    fprintf(output_file,"%c", symbol);
                }
            }
        }
    }
if (!feof(input_file)) fprintf(output_file,"%c",symbol);
}

fclose(input_file);
fclose(output_file);
}

Текст, на котором я тестирую. Текст после цифры 4 и до цифры 6 остается, хотя должен удаляться. На программу смотрю - вроде все верно, вроде должно выполняться... Код вроде элементарный..(

int main (void)
{
setlocale (LC_ALL,"Russian");   
////////////////////////////
1
\\//\\\///\\//\\\;
2
"/////////"
// kojdlfkerf
3
"/* kkkk */" //slkj
4
/*
khg
dmflkdms
fvsd
kf;sd;l
////////piouhjkl
5
    sxsalkxas
    //
    */
    6
    \
//  system ("pause");
    7
}

Источник: https://ru.stackoverflow.com/questions/205788/%D0%A3%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B8-%D0%B8%D0%B7-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BD%D0%B0-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5-%D0%A1%D0%B8

Тебе может это понравится...

Добавить комментарий