小程序--注释转换(C to c++)
2017-12-08 17:45
183 查看
在此次小项目中的不足之处:在编程过程中由于对extern运用不熟悉,导致文件链接错误,除此之外粗心之下变量名写错,造成死循环。
头文件(turns.h):
#ifndef _TURNS_H_
#define _TURNS_H_
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define INPUTFILE "input.c"
#define OUTPUTFILE "output.c"
enum{
ORDS,
CS,
CPPS,
EOFS,
};
void turns();
#endif //_TURNS_H_
主函数文件(main-body.c):
#include "turns.h"
int main()
{
turns();
system("pause");
return 0;
}#include "turns.h"
int main()
{
turns();
system("pause");
return 0;
}
转换函数文件(turns.c):
#include "turns.h"
extern int stu = 0;
void C_Stu(FILE * ifp, FILE * ofp) //c注释部分处理
{
int c1 = 0;
int c2 = 0;
int c3 = 0;
while (1)
{
c1 = fgetc(ifp);
switch (c1)
{
case '/':
{
c2 = fgetc(ifp);
fputc(c1, ofp);
if (c2 == '*')
{
fputc('/', ofp);
}
else if (c2 == '/')
{
stu = CPPS;
}
else if (c2 == EOF)
{
stu = EOFS;
}
break;
}
case '\n':
{
fputc(c1, ofp);
fputc('/', ofp);
fputc('/', ofp);
break;
}
case '*':
{
c2 = fgetc(ifp);
c3 = fgetc(ifp);
if (c2 == '/')
{
if (c3 != '\n')
fputc('\n', ofp);
stu = ORDS;
}
ungetc(c3, ifp);
break;
}
default:
fputc(c1, ofp);
break;
}
if (stu == EOFS || stu == ORDS || stu == CPPS)
break;
}
}
void Cpp_Stu(FILE * ifp, FILE * ofp) //c++注释部分处理
{
int c = 0;
while (1)
{
c = fgetc(ifp);
if (c == '\n')
{
fputc(c, ofp);
stu = ORDS;
break;
}
if (c == EOF)
{
stu = EOFS;
break;
}
fputc(c, ofp);
}
}
void Ord_Stu(FILE * ifp, FILE * ofp) //非注释部分处理
{
int c1 = 0;
int c2 = 0;
while (1)
{
c1 = fgetc(ifp);
if (c1 == '/')
{
c2 = fgetc(ifp);
switch (c2)
{
case '*':
stu = CS;
break;
case '/':
stu = CPPS;
break;
default:
break;
}
ungetc(c2, ifp);
ungetc(c1, ifp);
break;
}
if (c1 == EOF)
{
stu = EOFS;
break;
}
fputc(c1, ofp);
}
}
static void turns_work(FILE * ifp, FILE * ofp)
{
while (stu != EOFS)
{
switch (stu)
{
case ORDS:
Ord_Stu(ifp, ofp);
break;
case CS:
C_Stu(ifp, ofp);
break;
case CPPS:
Cpp_Stu(ifp, ofp);
break;
case EOFS:
break;
default:
break;
}
}
}
void turns()
{
FILE * ifp = fopen(INPUTFILE, "r");
FILE * ofp = fopen(OUTPUTFILE, "w");
if (ifp == NULL || ofp == NULL)
{
perror("error!");
}
turns_work(ifp, ofp);
fclose(ifp);
fclose(ofp);
}
头文件(turns.h):
#ifndef _TURNS_H_
#define _TURNS_H_
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define INPUTFILE "input.c"
#define OUTPUTFILE "output.c"
enum{
ORDS,
CS,
CPPS,
EOFS,
};
void turns();
#endif //_TURNS_H_
主函数文件(main-body.c):
#include "turns.h"
int main()
{
turns();
system("pause");
return 0;
}#include "turns.h"
int main()
{
turns();
system("pause");
return 0;
}
转换函数文件(turns.c):
#include "turns.h"
extern int stu = 0;
void C_Stu(FILE * ifp, FILE * ofp) //c注释部分处理
{
int c1 = 0;
int c2 = 0;
int c3 = 0;
while (1)
{
c1 = fgetc(ifp);
switch (c1)
{
case '/':
{
c2 = fgetc(ifp);
fputc(c1, ofp);
if (c2 == '*')
{
fputc('/', ofp);
}
else if (c2 == '/')
{
stu = CPPS;
}
else if (c2 == EOF)
{
stu = EOFS;
}
break;
}
case '\n':
{
fputc(c1, ofp);
fputc('/', ofp);
fputc('/', ofp);
break;
}
case '*':
{
c2 = fgetc(ifp);
c3 = fgetc(ifp);
if (c2 == '/')
{
if (c3 != '\n')
fputc('\n', ofp);
stu = ORDS;
}
ungetc(c3, ifp);
break;
}
default:
fputc(c1, ofp);
break;
}
if (stu == EOFS || stu == ORDS || stu == CPPS)
break;
}
}
void Cpp_Stu(FILE * ifp, FILE * ofp) //c++注释部分处理
{
int c = 0;
while (1)
{
c = fgetc(ifp);
if (c == '\n')
{
fputc(c, ofp);
stu = ORDS;
break;
}
if (c == EOF)
{
stu = EOFS;
break;
}
fputc(c, ofp);
}
}
void Ord_Stu(FILE * ifp, FILE * ofp) //非注释部分处理
{
int c1 = 0;
int c2 = 0;
while (1)
{
c1 = fgetc(ifp);
if (c1 == '/')
{
c2 = fgetc(ifp);
switch (c2)
{
case '*':
stu = CS;
break;
case '/':
stu = CPPS;
break;
default:
break;
}
ungetc(c2, ifp);
ungetc(c1, ifp);
break;
}
if (c1 == EOF)
{
stu = EOFS;
break;
}
fputc(c1, ofp);
}
}
static void turns_work(FILE * ifp, FILE * ofp)
{
while (stu != EOFS)
{
switch (stu)
{
case ORDS:
Ord_Stu(ifp, ofp);
break;
case CS:
C_Stu(ifp, ofp);
break;
case CPPS:
Cpp_Stu(ifp, ofp);
break;
case EOFS:
break;
default:
break;
}
}
}
void turns()
{
FILE * ifp = fopen(INPUTFILE, "r");
FILE * ofp = fopen(OUTPUTFILE, "w");
if (ifp == NULL || ofp == NULL)
{
perror("error!");
}
turns_work(ifp, ofp);
fclose(ifp);
fclose(ofp);
}
相关文章推荐
- Java重修之路(二)第一个程序分析,注释,关键字,标识符,常量,进制转换,类型转换
- 【卡西欧Fx5800-p程序】01 坐标转换程序-带注释
- 注释转换-小程序
- 使用game-to-flatpak脚本将商业Linux游戏安装程序转换为Flatpak应用程序
- 编译器练习:将C程序中的注释中的小写字母转换为大写字母
- 使用pyinstaller 打包程序后,运行Failed to execute script MainPage 报错,解决办法
- 实现货币金额中文大写转换的程序
- 使用PyInstaller——Python程序转换为EXE
- 转换中文日期的PHP程序
- 编写高质量代码改善C#程序的157个建议——建议153:若抛出异常,则必须要注释
- UTF8 To GBK 转换程序
- 运行程序时提出了这个一个警告:Activity not started, its current task has been brought to the front
- String.toCharArray()转换成char[]时的一些小发现
- STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
- [FUNC]Excel的列名称数字转换成字符convert column number to letter
- (Jacob)Java程序把Word文档直接转换成Html文件
- [置顶] [cocos2d-x]从源码角度思考convertToWorldSpace()与convertToWorldSpaceAR()坐标系的转换
- 过滤注释的程序
- LINQ体验(13)——LINQ to SQL语句之运算符转换和ADO.NET与LINQ to SQL
- C语言 编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。