小程序--注释转换(C to c++)

在此次小项目中的不足之处:在编程过程中由于对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);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值