#include<stdio.h>
#include <stdlib.h>
#include<stdbool.h>
int lines;
void m_cmnt(FILE *fp)
{
int prev = 0;
int ch;
while ((ch = getc(fp)) != EOF)
{
if (prev == '*' && ch == '/')
{
return;
}
else
{
prev = ch;
}
}
fprintf(stderr, "error in line %d: unterminated comment\n", lines+1);
}
int main ( int c , char **arr )
{
FILE *fp , *np ;
int ch , prev ;
lines = 0;
bool String=0 ;
fp = fopen("test.txt", "r") ;
np = fopen("temp.txt" , "w") ;
if (fp==NULL )
{
printf ("Invalid/No Filename given as Argument ! \n") ;
return 1 ;
}
while ((ch=getc(fp))!=EOF )
{
if (ch == '\n')
lines++;
/* file pointer currently not inside a string */
if ( !String )
{
if ( ch=='/' )
{
prev=ch ;
ch= getc(fp) ;
switch(ch)
{
case '*' : /*if(ch != 'a')
putc('h', np);*/
m_cmnt( fp) ;
putc(' ', np);
break ;
default :
putc(prev , np) ;
putc(ch , np) ;
break ;
}
}
else putc( ch ,np ) ;
}
else putc(ch , np) ;
if ( ch=='\"' || ch=='\'')
String = !String ;
prev = ch ;
}
fclose(fp) ;
lines++;
printf("line = %d", lines);
fclose(np) ;
//remove(arr[1]) ;
//rename( "temp.txt" , arr[1] ) ;
return 0 ;
}
Мой друг и я работаем над проектом самостоятельного вызова, и приведенный выше код представляет собой программу, которая удаляет комментарий из файла «test.txt» и записывает часть без комментариев в файл temp.txt.Это работает только для нескольких комментариев (преднамеренно).
Я пытался обработать символ \ n, чтобы создать новую строку, когда это происходит внутри комментария и вне комментария.Например, line1\nline2
следует экспортировать в разные строки.Также line1/*comm\nent*/line2
также должно быть экспортировано (записано) в разных строках.Но если escape-символ встречается в строковом или символьном литерале, его следует рассматривать как обычную строку или символ.