⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inorder_.c

📁 程序版本: 专业的C文件格式化源码 1.0 程序功能: 仅对C源文件行首空格及Tab进行整理
💻 C
📖 第 1 页 / 共 2 页
字号:
      if(flag_t1==flag_t2){
         if(flag_t1==1)
            if(flag_k2==1)
               ++k;
      }
      // --------------------------------------------------------------------
      
   }
   while(1);
   fclose(fp3);
   
   //************************************************************************************************************
   // 第三部处理,依照规则2,通过对关键词的检索 缩进下一段相关语句或复合语句(规则1漏过缩进的代码段)
   
   
   if((fp3=fopen(argv[3],"rb"))==NULL)      // 读取一个指定名称的文件, 文件名决定于argv[2]所指字符串
   {
      printf("\n 读取的文件不存在");
      getch();
      return;
   }
   
   inorder_f1=0;
   inorder_f2=0;
   flag_zhushi=0;
   flag_zhushi_e=0;
   case_flag1=0;
   case_flag2=0;
   case_flag3=0;
   case_end=0;
   j=0;
   k=0;           // 当前语句行首空格数目为N*k个
   do {
      for(i=0;i<255;++i){
         str[i]=0;
      }
      //取一行字符
      if(fgets(str,255,fp3)==NULL){
         if(!feof(fp3)){
            printf("fgets() error2!\n");
            getch();
         }
         break;
      }
      
      p=str;
      for(flag_zhushi_f=0,m=0,flag_d=0,flag_k3=0,flag_t1=0,flag_t2=0,inorder_f3=0; ; ++p){
         if((*p=='"') && (*(p+1) != 0x27)){        // 检测双引号奇偶数,引用的双引号忽略不计
            if(inorder_f3==0)inorder_f3=1;
            else inorder_f3=0;   
         }
         else if(*p==0){
            break;
         }
         if(inorder_f3==0){
            if((*p=='/')&&(*(p+1)=='*')){
               flag_zhushi=1;
               flag_zhushi_e=1;
               ++p;
            }
            else if((*p=='*')&&(*(p+1)=='/')){
               if(flag_zhushi==1){
                  flag_zhushi=0;
               }
            }
            else if((*p=='/')&&(*(p+1)=='/')){
               flag_zhushi_f=1;
               break;
            }
         }
         
         if(*p != 0x20){
            ++flag_k3;
         }
         if(str_cmp("#if",p) || str_cmp("#elif",p) || str_cmp("#else",p) || str_cmp("#endif",p)){
            if(flag_k3==1)break;
         }
         if(str_cmp("case ",p) || str_cmp("case ",p)){
            if(flag_k3==1){
               case_end=0;
               case_flag1=1;
               k=0;
            }
         }
         
         if(flag_k3==1){
            if(str_cmp("if",p) || str_cmp("else",p) || str_cmp("do",p) || str_cmp("while",p) || str_cmp("for",p)){
               flag_d=1;       // 检测语句是否存在关键词
            }
         }
         if(flag_zhushi==0){
            if(inorder_f3==0){
               if((*p=='{') && (*(p+1) !=0x27)){
                  ++flag_t1;      //'{'出现次数
               }
               if((*p=='}') && (*(p+1) !=0x27)){
                  ++flag_t2;      //'}'出现次数
               }
               if(*p==';'){          // 检测句尾是否有分号
                  m=3;
               }
               if(*p==')'){
                  m=0;
               }
               if(str_cmp("break",p)){
                  if(case_flag1==1)
                     case_end=1;
               }
            }
         }
         
      }
      
      if(j==1){
         if(flag_d==1){
            if(flag_t1==flag_t2){
               if(flag_t1==0){
                  ++k;
               }
               
            }
            if(flag_t1 > flag_t2){
               if(k>0)++k;
            }
         }
      }
      
      
      if((flag_d==1)&&(flag_t1==0) && (flag_t2==0) && (m!=3)){
         j=1;                  // 有关键字且没有'{'及'}'且句尾没有分号';'时, 标志置位
         inorder_f1=0;
         inorder_f2=0;
      }
      
      
      //----------------------------------------------------------------------
      // 此段缩进case default
      p=str;
      while(*p==0x20)++p;
      if(str_cmp("case ",p) || str_cmp("case ",p)){
         //case_end=0;
         case_flag1=1;
         k=0;
      }
      if(str_cmp("default",p)){
         case_flag1=1;
         case_flag2=1;
         k=0;
      }
      if(case_end==1){
         if(flag_t2 > flag_t1){
            case_flag1=0;
            case_flag2=0;
            case_flag3=0;
            case_end=0;
            k=0;      
         }
      }
      //----------------------------------------------------------------------
      // 每次读入一行语句, 分析后写入另一文件, 写文件操作只有两部分:
      // 1.写入空格缩进 2.写入省略行首空格的代码部分
      // 不影响原来的风格或更改原来的程序结果, 因此虽然功能单一, 但足够安全.
      if(flag_zhushi_e==0)
         for(i=0;i<k;++i)        
            if(fputs("   ",fp4)==EOF)   // 在此更改每层缩进几个空格
               printf("write error. \n");
      
      if(fputs(str,fp4)==EOF) printf("write error. \n");
      //----------------------------------------------------------------------
      if(flag_zhushi==0)
         flag_zhushi_e=0;
      
      if(j==1){
         if(flag_t1 > flag_t2){
            inorder_f1=1;
            inorder_f2=0;
         }
      }      
      
      
      
      if(flag_t1 < flag_t2){
         if(inorder_f1==1){
            if(inorder_f2==0){
               k=0;
            }
         }
      }
      if(flag_t1==flag_t2){
         if(flag_t1==0){
            if(flag_d==0){
               if(inorder_f1==0){
                  if(inorder_f2==0){
                     if(flag_zhushi_f==0)
                        k=0;
                  }
               }
            }
         }
      }
      if((flag_d==0) && flag_zhushi_f==0){
         j=0;
      }
      
      
      //----------------------------------------------------------------------
      // 此段缩进case default
      if(case_flag1==1){
         k=1;   
      }
      
      if(case_flag3==1){
         case_flag1=0;
         case_flag2=0;
         case_flag3=0;
         case_end=0;
         k=0;      
      }
      if(case_flag1==1){
         p=str;
         while(*p==0x20)++p;
         if(str_cmp("break",p) || str_cmp("return",p)){
            case_end=1;
            if(case_flag2==1){
               case_flag3=1;
            }
         }
      }
      //----------------------------------------------------------------------
      
      
   } while(1);
   
   
   //************************************************************************************************************
   // 第四部处理,依照规则3,通过对关键词的检索 缩进对下一行执行语句(规则1、2漏过缩进的单行代码段)
   fclose(fp4);
   
   
   if((fp4=fopen(argv[4],"rb"))==NULL)      // 读取一个指定名称的文件, 文件名决定于argv[2]所指字符串
   {
      printf("\n 读取的文件不存在");
      getch();
      return;
   }
   
   inorder_f1=0;
   inorder_f2=0;
   flag_zhushi=0;
   flag_zhushi_e=0;
   j=0;
   k=0;           // 当前语句行首空格数目为N*k个
   do {
      for(i=0;i<255;++i){
         str[i]=0;
      }
      
      //取一行字符
      if(fgets(str,255,fp4)==NULL){
         if(!feof(fp4)){
            printf("fgets() error2!\n");
            getch();
         }
         break;
      }
      
      p=str;
      for(m=0,flag_d=0,flag_k3=0,flag_t1=0,flag_t2=0,inorder_f3=0; ; ++p){
         if((*p=='"') && (*(p+1) != 0x27)){        // 检测双引号奇偶数,引用的双引号忽略不计
            if(inorder_f3==0)inorder_f3=1;
            else inorder_f3=0;   
         }
         else if(*p==0){
            break;
         }
         if(inorder_f3==0){
            if((*p=='/')&&(*(p+1)=='*')){
               flag_zhushi=1;
               flag_zhushi_e=1;
               ++p;
            }
            else if((*p=='*')&&(*(p+1)=='/')){
               if(flag_zhushi==1){
                  flag_zhushi=0;
               }
            }
            else if((*p=='/')&&(*(p+1)=='/')){
               if(flag_k3==0)
                  flag_zhushi_e=1;
               break;
            }
         }
         if(*p != 0x20)++flag_k3;
         if(str_cmp("#if",p) || str_cmp("#elif",p) || str_cmp("#else",p) || str_cmp("#endif",p)){
            if(flag_k3==1)break;
         }
         if(flag_zhushi==0){
            if(str_cmp("if",p) || str_cmp("else",p) || str_cmp("do",p) || str_cmp("while",p)/**/ || str_cmp("for",p)){
               if(flag_k3==1)
                  flag_d=1;       // 检测语句是否存在关键
            }
            if((*p=='{') && (*(p+1) !=0x27)){
               ++flag_t1;         //'{'出现次数
            }
            if((*p=='}') && (*(p+1) !=0x27)){
               ++flag_t2;         //'}'出现次数
            }
            if(*p==';'){          // 检测句尾是否有分号
               m=3;
            }
            if(*p==')'){
               m=0;
            }
         }
      }
      
      p=str;
      inorder_f3=0;
      while(*p++==0x20)++inorder_f3;
      
      if(j==1){
         if(flag_t1==flag_t2){
            if(flag_t1==0){
               if(flag_d==0){
                  if(inorder_f1==1){
                     if(inorder_f3==inorder_f2){
                        ++k;
                     }
                  }
               }
            }
         }
         else {
            j=0;
            k=0;
         }
      }
      //----------------------------------------------------------------------
      // 每次读入一行语句, 分析后写入另一文件, 写文件操作只有两部分:
      // 1.写入空格缩进 2.写入省略行首空格的代码部分
      // 不影响原来的风格或更改原来的程序结果, 因此虽然功能单一, 但足够安全.
      if((flag_zhushi_f==1)&&(flag_k3==0)){
      }
      else if (flag_zhushi_e==0)
         for(i=0;i<k;++i)
            if(fputs("   ",fp5)==EOF) // 在此更改每层缩进几个空格
               printf("write error. \n");
      if(fputs(str,fp5)==EOF)
         printf("write error. \n");
      //----------------------------------------------------------------------
      
      if(flag_zhushi==0)
         flag_zhushi_e=0;
      
      if(j==1){
         if(flag_t1==flag_t2){
            if(flag_t1==0){
               if(flag_d==0){
                  if(inorder_f1==1){
                     if(inorder_f3==inorder_f2){
                        k=0;
                        j=0;
                     }
                  }
               }
            }
         }
      }
      
      if((flag_d==1)&&(flag_t1==0) && (flag_t2==0) && (m==0)){
         j=1;
      }
      inorder_f2=inorder_f3;
      inorder_f1=1;
      
      
   } while(1);
   //************************************************************************************************************
END_PLACE:
   
   fclose(fp1);
   fclose(fp2);
   fclose(fp3);
   fclose(fp4);
   fclose(fp5);
   
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -