将一个C语言源程序文件source1.c中所有注释去掉后,存入另一个文件source2.c中,试编写相应程序。注释的种类有两种,第一种/**/,第二种//。注释之外的任何字符(包括:换行、空格、Tab)都要保留。假设没有注释嵌套的情况出现。
时间: 2024-02-29 08:51:48 浏览: 58
好的,以下是实现该功能的C语言代码:
```c
#include <stdio.h>
int main() {
FILE *fp1, *fp2;
char ch, pre_ch;
int flag = 0; // flag为1表示当前为注释状态,flag为0表示当前不为注释状态
fp1 = fopen("source1.c", "r"); // 打开source1.c文件
if (fp1 == NULL) {
printf("无法打开文件source1.c\n");
return 1;
}
fp2 = fopen("source2.c", "w"); // 打开source2.c文件
if (fp2 == NULL) {
printf("无法打开文件source2.c\n");
return 1;
}
while ((ch = fgetc(fp1)) != EOF) {
if (flag == 0) { // 当前不为注释状态
if (ch == '/') {
pre_ch = ch;
ch = fgetc(fp1);
if (ch == '*') { // 进入/**/注释状态
flag = 1;
} else if (ch == '/') { // 进入//注释状态
flag = 2;
} else { // 不是注释,写入文件
fputc(pre_ch, fp2);
fputc(ch, fp2);
}
} else { // 不是注释,写入文件
fputc(ch, fp2);
}
} else if (flag == 1) { // 当前为/**/注释状态
if (ch == '*') {
pre_ch = ch;
ch = fgetc(fp1);
if (ch == '/') { // 退出注释状态
flag = 0;
}
}
} else { // 当前为//注释状态
if (ch == '\n') { // 退出注释状态
flag = 0;
fputc(ch, fp2);
}
}
}
fclose(fp1); // 关闭文件
fclose(fp2);
return 0;
}
```
这个程序的思路是,读取source1.c文件中的每一个字符,判断当前是否为注释状态,如果不是则将字符写入source2.c中;如果是,则忽略该字符,直到注释结束。具体实现中,使用flag变量记录当前状态,使用fgetc()和fputc()函数进行文件读写操作。
阅读全文