/
//大家有没有试过当想把VC带有"//"注释
//的程序放到TC下运行时全部都要改,
//你不觉得烦吗??
//实现VC"//" 注释转换为TC "/*.........*/" 注释
//运行环境VC++6.0 TC环境下没测试过!
//注意一行当中不能有"*/"
#include"stdio.h"
#include<stdlib.h>
#define ch1 '*'
#define ch2 "*/"
//const char ch1='*';
//const char *ch2="*/";
/*/*/
/*///把 注释"//" 转换为 注释"/*.........*/
int LineAnotate(char c,int count,FILE *fp1,FILE *fp2)
{
while(c!=EOF)
{
if(c=='/')
{
count++;
while(count==2) /* 此时c=='/'*/
{
count=0; /* 清零*/
fputc(ch1,fp2);
/* fputc('*',fp2); // 把'*'输入到'/'后*/
c=fgetc(fp1); /*?? if c='/'时count没有+1 ???????*/
/* c=='/'被新字符覆盖*/
while(c!='/n')
{
fputc(c,fp2);
c=fgetc(fp1); /*在继续输出本行内的字符*/
}
/*----------------------------------------------------------*/
if(c=='/n') /*当遇到"//"后,在本行尾输出*/
{
fputs(ch2,fp2);
/* fputc(c,fp2); //输出'/n' 导致重复换行 */
}
/*----------------------------------------------------------*/
}/*end while(c!='/n')*/
}/*end if(c!='/')*/
fputc(c,fp2); /*避免重复换行*/
c=fgetc(fp1);
/*每当遇到新一行开始时count清零,以免二行以上的'/'数量叠加*/
if(c=='/n'||c!='/')
count=0;
}/*end while(c!=EOF)*/
return 1;
}
int main()
{
FILE *fp1;
FILE *fp2;
char c;
int flag=0;
int count=0;
char filepath1[30];
char filepath2[30];
printf("请输入文件路径filepath1:如: D://vc.c /n");
scanf("%s",filepath1);getchar();
printf("请输入文件路径filepath2:如: D://vc副本.c /n");
scanf("%s",filepath2);getchar();
if((fp1=fopen(filepath1,"r"))==NULL)/*只读*/
{
printf("Cannot open this file1!/n");
exit(0);
}
if((fp2=fopen(filepath2,"a"))==NULL) /*追加*/
{
printf("Cannot open this file2!/n");
exit(0);
}
c=fgetc(fp1);
flag=LineAnotate(c,count,fp1,fp2);
if(flag=1)printf("注释转换成功!/n");
fclose(fp1);
fclose(fp2);
return 0;
}