过滤.c文件中的注释

任务:将一个.c文件1复制到另一个文件2中,要求过滤掉文件1中的注释。

注释类型:以//开头或者/**/中的注释。用一个函数完成该功能。

          基本要求:假设//或者/**/不会出现在printf语句中。

 1 #include <stdio.h>
 2 /**
 3 @author tz
 4 @date 2019-04-11
 5 */ 
 6 void filterWrite(FILE* fpin, FILE* fpout);
 7 
 8 int main() {
 9     FILE* fpin = fopen("p12in.c", "r");
10     FILE* fpout = fopen("p12out.c", "w");
11     if (fpin == NULL || fpout == NULL)
12         exit(0);
13     filterWrite(fpin, fpout);
14     fclose(fpin);
15     fclose(fpout);
16     
17 }
18 
19 //过滤注释,并写入新文件
20 void filterWrite(FILE* fpin,FILE* fpout) {
21     int ch = fgetc(fpin);
22     int key1 = 0,key2=0;//key作为符合标准的标志,1为//,2为/**/
23     while (ch != EOF) {
24         if (ch == '/') {
25             int i = 1;
26             ch = fgetc(fpin);
27             if (key1 == 0 &&ch == '/')//排除//与*/同行时改变key2 
28             {
29                 key1 = 1;
30                 i = 0;
31             }
32             if (key1 == 0&&ch == '*')
33             {
34                 key2 = 1;
35                 ch = fgetc(fpin);
36                 i = 0;
37             }
38             if(i==1&&key1==0&&key2==0)
39             {
40                 fseek(fpin, -2, SEEK_CUR);
41                 ch = fgetc(fpin);//退回使ch==‘/’,把/写入
42             }
43         }
44         
45         if ((key1) == 1 && ch == '\n') {//在遇到//后遇到换行符,把换行写入
46                 key1 = 0;
47         }
48         if (key1 == 0 && key2 == 0) {
49             fputc(ch, fpout);
50         }
51          if (key2 == 1&&ch=='*') {
52             ch = fgetc(fpin);
53             if (ch == '/') {
54                 key2 = 0;
55             }
56             else
57             {
58                 fseek(fpin, -2, SEEK_CUR);//退回指向*
59                 ch = fgetc(fpin);
60                 fputc(ch, fpout);
61             }
62             //把'*'写入文件,fpin指向'*'的下一个字符
63         }
64         //其余情况不写入    
65         ch = fgetc(fpin);
66     }
67 }

 

posted @ 2020-04-22 19:29  简单记录一下咯  阅读(267)  评论(0编辑  收藏  举报