註釋轉換

#include #include typedef enum ConvertState { SUCCESS, NO_MATCH, }ConvertState; typedef enum State { C_BEGIN, C_END, }; ConvertState Convert(FILE *fIn, FILE *fOut) { assert(fIn); assert(fOut); int flag; char first, second; flag = C_BEGIN; do { first = fgetc(fIn); switch (first) { // 一般情況 case '/': second = fgetc(fIn); //匹配問題 if (second == '*'&&flag == C_END) { fputc('/', fOut); fputc('/', fOut); flag = C_BEGIN; } //c++註釋問題 else if (second == '/') { char Next = fgetc(fIn); fputc('/', fOut); fputc('/', fOut); while (Next != '\n'&&Next != EOF) { fputc(Next, fOut); Next = fgetc(fIn); } fseek(fIn, -1, SEEK_CUR); } else { fputc(first, fOut); fputc(second, fOut); } break; case '*': second = fgetc(fIn); //換行問題連續註釋問題 if (second == '/') { char Next = 0; Next = fgetc(fIn); if (Next != '\n'&&Next != EOF) { fseek(fIn, -1, SEEK_CUR); fputc('\n', fOut); } else { fputc('\n', fOut); } flag = C_END; } else if (second == '*') { fputc(first, fOut); fseek(fIn, -1, SEEK_CUR); break; } else { fputc(first, fOut); fputc(second, fOut); } break; //多行註釋問題 case '\n': fputc('\n', fOut); if (flag == C_BEGIN) { fputc('/', fOut); fputc('/', fOut); } break; default: fputc(first, fOut); break; } } while (first!= EOF); if (flag == C_END) return SUCCESS; else return NO_MATCH; } #define _CRT_SECURE_NO_WARNINGS #include"conver.h" int main() { FILE *in; FILE *out; in=fopen("fIn.txt", "r"); out=fopen("fOut.txt", "w"); if (in == NULL) { fclose(out); fclose(in); printf("打開文件失敗\n"); } int ret= Convert(in, out); if (ret == NO_MATCH) { printf("不匹配\n"); } if (ret == SUCCESS) { printf("轉換成功\n"); } fclose(in); fclose(out); system("pause"); return 0; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章