```
#ifndef __COMMENT_CONVERT_H__
#define __COMMENT_CONVERT_H__
#include <stdio.h>
#include <stdlib.h>
enum Status
{
NUL_STATUS,
C_STATUS,
CPP_STATUS,
END_STATUS
};
void CommentConvert();
void DoConvertWork(FILE* pfIn, FILE* pfOut);
void DoNulStatus(FILE* pfIn, FILE* pfOut, enum Status* status);
void DoCStatus(FILE* pfIn, FILE* pfOut, enum Status* status);
void DoCppStatus(FILE* pfIn, FILE* pfOut, enum Status* status);
#endif //__COMMENT_CONVERT_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include"CommentConvert.h"
enum STATUS status = NUL_STATUS;
void DoNulStatus(FILE *pfIn, FILE *pfOut, enum Status*status)
{
int first = 0;
int second = 0;
first = fgetc(pfIn);
switch (first)
{
case '/':
second = fgetc(pfIn);
if (second == '/')
{
fputc('/', pfIn);
fputc('/', pfOut);
*status = CPP_STATUS;
}
else if (second == '*')
{
fputc(first, pfIn);
fputc('/', pfOut);
*status = C_STATUS;
}
else
{
fputc(first, pfOut);
fputc(second, pfOut);
}
break;
case EOF:
status = END_STATUS;
break;
case '"':
fputc(first, pfOut);
break;
default:
fputc(first, pfOut);
break;
}
}
void DoCStatus(FILE *pfIn, FILE *pfOut, enum Status* status)
{
int first = 0;
int second = 0;
first = fgetc(pfIn);
switch (first)
{
case '*':
second = fgetc(pfIn);
if (second == '/')
{
status = NUL_STATUS;
second = fgetc(pfIn);
if (second != '\n')
{
fputc('\n', pfOut);
ungetc(second, pfIn);
}
else
{
ungetc(second, pfIn);
}
}
else
{
fputc(first, pfOut);
}
break;
case '\n':
fputc(first, pfOut);
fputc('/', pfOut);
fputc('/', pfOut);
break;
default:
fputc(first, pfOut);
break;
}
}
void DoCppStatus(FILE *pfIn, FILE *pfOut, enum Status*status)
{
int first = 0;
int fgetc(pfIn);
first = fgetc(pfIn);
switch (first)
{
case '\n':
fputc(first, pfOut);
status = NUL_STATUS;
break;
default:
if (first == EOF)
{
status = END_STATUS;
}
else
{
fputc(first, pfOut);
}
break;
}
}
void DoConvertWork(FILE*pfln, FILE*pfOut)
{
enum STATE status = NUL_STATUS;
while (status != END_STATUS)
{
switch (status)
{
case NUL_STATUS:
DoNulStatus(pfln, pfOut, &status);
break;
case C_STATUS:
DoCStatus(pfln, pfOut, &status);
case CPP_STATUS:
DoCppStatus(pfln, pfOut, &status);
break;
}
}
}
void CommentConvert(FILE *pfIn, FILE *pfOut)
{
while (status != END_STATUS)
{
switch (status)
{
case NUL_STATUS:
DoNulStatus(pfIn, pfOut,&status);
break;
case C_STATUS:
DoCStatus(pfIn, pfOut, &status);
break;
case CPP_STATUS:
DoCppStatus(pfIn, pfOut, &status);
break;
case END_STATUS:
break;
}
}
}
//test.c测试文件
void test()
{
CommentConvert();
}
int main()
{
FILE *pfIn= NULL;
FILE *pfOut = NULL;
printf("注释开始\n");
pfIn = fopen("input.FIlE ","r");
if (NULL == pfIn)
{
perror("open file for read");
exit(EXIT_FAILURE);
}
pfOut = fopen("Output.FILE", "w");
if (NULL == pfOut)
{
fclose(pfIn);
perror("open file for write");
exit(EXIT_FAILURE);
}
CommentConvert(pfIn, pfOut);
printf("注释结束\n");
system("pause");
return 0;
}