使用Devc++编写以下代码一、 实验目的 C语言编译时需要进行预处理,其中一项是去掉注释。 二、 实验要求 注释有两种,本实验去掉其中一种:/* */。
时间: 2024-02-23 18:02:36 浏览: 196
好的,请看以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1000
int main()
{
FILE *fp_in, *fp_out;
char input_file[MAX_LEN], output_file[MAX_LEN], line[MAX_LEN], *pos;
int len, i;
printf("请输入需要去除注释的C语言程序文件名:");
scanf("%s", input_file);
printf("请输入去除注释后的输出文件名:");
scanf("%s", output_file);
fp_in = fopen(input_file, "r");
if (fp_in == NULL) {
printf("无法打开文件 %s!\n", input_file);
return 1;
}
fp_out = fopen(output_file, "w");
if (fp_out == NULL) {
printf("无法打开文件 %s!\n", output_file);
return 1;
}
while (fgets(line, MAX_LEN, fp_in) != NULL) {
pos = strstr(line, "/*");
if (pos != NULL) {
*pos = '\0'; // 将/*前面的内容单独输出
fputs(line, fp_out);
do {
fgets(line, MAX_LEN, fp_in);
pos = strstr(line, "*/");
} while (pos == NULL);
pos += 2; // 将*/后面的内容继续扫描
} else {
pos = line;
}
while ((pos = strchr(pos, '/')) != NULL) {
if (*(pos + 1) == '/') {
*pos = '\0'; // 将//前面的内容单独输出
break;
} else {
pos += 1;
}
}
len = strlen(line);
for (i = 0; i < len; i++) {
if (line[i] != '\r' && line[i] != '\n') {
fputc(line[i], fp_out);
}
}
fputc('\n', fp_out);
}
fclose(fp_in);
fclose(fp_out);
printf("注释已经成功去除!\n");
return 0;
}
```
这段代码实现了去除C语言程序中/* */类型注释的功能,具体实现方法是扫描每一行代码,找到/*,则将/*前面的内容单独输出,然后一直读取输入文件内容,直到找到*/为止,将*/后面的内容继续扫描。另外,还需要处理//类型的注释,这种注释只需要将//前面的内容单独输出即可。
阅读全文