亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inorder_.c

?? 程序版本: 專業的C文件格式化源碼 1.0 程序功能: 僅對C源文件行首空格及Tab進行整理
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
程序版本: 專業的C文件格式化源碼 1.0

安全性能: 只對行首的空格和Tab操作,不添加空行,
          不操作單行注釋語句/多行注釋段,不修改任何執行語句

程序功能:
	
	 僅對C源文件行首空格及Tab進行整理,不拖拽大括號改變原有風格:
	 1).格式對齊, 刪除行首的Tab或空格
	 2).格式縮進, 以Tab或空格填充行首

命令行參數:
		 參數1       參數2     參數3    參數4    參數5    參數6 
	 inorder.exe   source.c  temp1.c  temp2.c  temp3.c  object.c  

命令行參數說明:
	 參數1:  執行的程序名
	 參數2:  縮進不規范的C程序
	 參數3:  臨時文件1
	 參數4:  臨時文件2
	 參數5:  臨時文件3
	 參數6:  格式化后的C程序

格式整理規則:
	
1). 規則1: 通過檢查'{'和'}', 層次縮進c程序. 

2). 規則2: 當前行出現"if", "else", "else if", "for", "do",  "while",  "switch"時,  
	 要求下一段復合語句或相關語句層次縮進.
	 
3). 規則3: 當前行出現"if", "else", "else if", "for", "do",  "while",  "switch"時,  
	 要求下一行執行語句縮進
	 
4). 執行以上步驟時跳過\* *\及\\的注釋段.

5). 其它規則

通過上述3個規則,一般C程序的整理都可以完成,因此可以放心使用。

另外,因為規則2、3的實現比較復雜,所以給出源碼,希望眾多網友

能發揮集體智慧,改進或代替我笨拙的實現思路。

*/

#if 0

下列注釋類型將會引起程序出錯:

1./*/-------------------------------------------------*/
   2./*----------------------------//--------------------*/
   3./*----------------------------
     * if(*str==0){
     *    return 1;
     * }
     *--------------------*/if(*str==0){
   return 1;
}
下列字符串將會引起程序出錯:

/*
   1. char str[]="abcdefg
               efghiklmnopqrstuvwxyz123";
   
   2. char str[]="//abcdefghijklmn";
   
   3. char str[]="/*abcdefghijklmn";
   
   4. char str[]="*/abcdefghijklmn";

#endif


#include <conio.h>
#include <stdio.h>

/* 將p所指字符串跟一個字符串常量比較,相等返回1 */
unsigned char str_cmp(const char *str,char *p1)
{
   char *p=p1;
   while(1){
      if(*str==0){
         return 1;
      }
      if(*str==*p){
         ++str;
         ++p;
      }
      else return 0;
   }
}

/* 判斷此行是否存在地址標號,存在返回1 */
unsigned char label_chr(char *str)
{
   char *p=str;
   unsigned char i=0;
   if(str_cmp("default",p))return 0;	// default:是特例, 不作為地址標號
   while(1){
      if(*p==0x20){ // 空格
         return i;
      }
      if(*p==0x0D){ // 回車
         return i;
      }
      if(*p==0x09){ // Tab
         return i;
      }
      if(*p==0x22){ // 雙引號
         return i;
      }
      if(*p==0x3F){ // 問號
         return i;
      }
      if(*p==0x27){ // 分號'
         return i;
      }
      if(*p==':'){
         i=1;
      }
      ++p;
   }
}

void main(char argc, char* argv[])
{
   /*
     程序執行時, 命令行參數的個數記錄在 argc 里
     命令行第一個參數(字符串)的地址被賦給argv[0]
     命令行第二個參數(字符串)的地址被賦給argv[1]
     命令行第三個參數(字符串)的地址被賦給argv[2]
     ...
   */
   FILE *fp1,*fp2,*fp3,*fp4,*fp5;           // 定義文件指針
   int i,j,k;
   int /*flag_k1,*/flag_k2,flag_k3,flag_d,flag_t1,flag_t2,inorder_f1,inorder_f2,inorder_f3,flag_zhushi,flag_zhushi_e,flag_zhushi_f;
   
   int case_flag1,case_flag2,case_flag3,case_end;
   char m,str[255],*p;
   
   if(argc != 6)
   {  printf("\n USAGE: INORDER.EXE TEMP1.C TEMP2.C TEMP3.C OBJECT.C");
      getch();
      return;
   }
   if((fp1=fopen(argv[1],"rb"))==NULL)      // 讀取一個指定名稱的文件, 文件名決定于argv[1]所指字符串
   {
      printf("\n 讀取的文件不存在");
      getch();
      return;
   }
   if((fp2=fopen(argv[2],"wb"))==NULL)      // 新建一個文件, 文件名決定于argv[2]所指字符串, 文件若存在則內容被清空
   {
      printf("\n 不能建立目標文件");
      getch();
      return;
   }
   if((fp3=fopen(argv[3],"wb"))==NULL)      // 新建一個文件, 文件名決定于argv[3]所指字符串, 文件若存在則內容被清空
   {
      printf("\n 不能建立目標文件");
      getch();
      return;
   }
   if((fp4=fopen(argv[4],"wb"))==NULL)      // 新建一個文件, 文件名決定于argv[4]所指字符串, 文件若存在則內容被清空
   {
      printf("\n 不能建立目標文件");
      getch();
      return;
   }
   if((fp5=fopen(argv[5],"wb"))==NULL)      // 新建一個文件, 文件名決定于argv[5]所指字符串, 文件若存在則內容被清空
   {
      printf("\n 不能建立目標文件");
      getch();
      return;
   }
/*
	if((fp6=fopen(argv[6],"wb"))==NULL)      // 新建一個文件, 文件名決定于argv[6]所指字符串, 文件若存在則內容被清空
	{
	  printf("\n 不能建立目標文件");
	  getch();
	  return;
	}
*/
   
   //************************************************************************************************************
   // 第一步處理:去掉行首的空格及Tab,執行后生成的臨時文件所有行的行首都沒有了空格和Tab
   do {
      //----------------------------------------------------
      // 字符串緩存清0
      for(i=0;i<255;++i){
         str[i]=0;
      }
      //----------------------------------------------------
      // 取一行字符
      if(fgets(str,255,fp1)==NULL){
         if(!feof(fp1)){
            printf("fgets() error!\n");
            getch();
         }
         break;
      }
      //----------------------------------------------------
      // 檢測此行有無跨行的注釋,有則標志j置1
      for(j=0,i=0,k=0;i<255;++i){
         if(str[i]==0x22){
            if(k==0)k=1;
            else k=0;
         }
         // 在檢測注釋標志時跳過"字符串常量"
         if(k==0){
            if((str[i]=='/') && (str[i+1]=='/')){
               break;
            }
            if((str[i]=='/') && (str[i+1]=='*')){
               j=1;
            }
            if((str[i]=='*') && (str[i+1]=='/')){
               j=0;
            }
         }
         if(str[i]==0){
            break;
         }
      }
      //----------------------------------------------------
      if (j==0){
         // 將行字符串寫入臨時文件,忽略行首的空格以及Tab
         for(i=0,p=str; i<255; ++p,++i){
            if((*p!=0x20) && (*p!=0x09)){
               break;
            }
         }
         if(fputs(p,fp2)==EOF){
            printf("write error. \n");
         }
      }
      else {
         // 跨行的/* */注釋不縮進,直接寫入臨時文件
         if(fputs(str,fp2)==EOF){
            printf("write error. \n");
         }
         do {
            for(i=0;i<255;++i){
               str[i]=0;
            }
            if(fgets(str,255,fp1)==NULL){
               if(!feof(fp1)){
                  printf("fgets() error!\n");
                  getch();
               }
               break;
            }
            for(j=0,i=0;i<255;++i){
               if((str[i]=='*') && (str[i+1]=='/')){
                  j=2;
               }
               if(str[i]==0){
                  break;
               }
            }
            if(fputs(str,fp2)==EOF){
               printf("write error. \n");
            }
            if(j==2){
               break;
            }
         } while(1);
      }
   } while(1);
   fclose(fp2);
   
   //************************************************************************************************************
   // 第二部處理,依照規則1,通過對'{'和'}'的檢查,在各行首添加空格進行層次縮進,此規則比較簡單
   
   if((fp2=fopen(argv[2],"rb"))==NULL)      // 讀取一個指定名稱的文件, 文件名決定于argv[2]所指字符串
   {
      printf("\n 讀取的文件不存在");
      getch();
      return;
   }
   flag_zhushi=0;
   flag_zhushi_e=0;
   k=0;           // 當前語句行首空格數目為N*k個
   do {
      for(i=0;i<255;++i){
         str[i]=0;
      }
      // 取一行字符
      if(fgets(str,255,fp2)==NULL){
         if(!feof(fp2)){
            printf("fgets() error2!\n");
            getch();
         }
         break;
      }
      p=str;
      for(flag_t1=0,flag_t2=0,inorder_f1=0,inorder_f2=0,/*flag_k1=0,*/flag_k2=0,flag_k3=0; ; ++p){
         if((*p=='"') && (*(p+1) != 0x27)){        // 檢測雙引號奇偶數,引用的雙引號忽略不計
            if(inorder_f2==0)inorder_f2=1;
            else inorder_f2=0;   
         }
         else if(*p==0){
            break;
         }
         if(inorder_f2==0){                        // 檢測注釋標志時跳過字符串常量
            if((*p=='/')&&(*(p+1)=='*')){
               flag_zhushi=1;
               flag_zhushi_e=1;
               ++inorder_f1;
            }
            else if((*p=='*')&&(*(p+1)=='/')){
               if(flag_zhushi==1){
                  flag_zhushi=0;
                  ++inorder_f1;
               }
            }
            if((*p=='/')&&(*(p+1)=='/')){
               break;
            }
         }
         
         if(*p != 0x20){
            ++flag_k3;
         }
         
         if(flag_k3==1){                           // 從非空白字符的開始處, 只檢測一次
            m=label_chr(p);                        // 檢測是否存在地址標號
            if(str_cmp("#if",p) || str_cmp("#elif",p) || str_cmp("#else",p) || str_cmp("#endif",p)){
               break;                              // 遇到編譯預處理指令則退出
            }
         }
         
         if(flag_zhushi==0){                       // 檢測'}'時跳過/* */注釋
            if((*p=='{') && (*(p+1) !=0x27)){      // 引用的'}'忽略不計
               //if(flag_t2==0)flag_k1=1;
               ++flag_t1;      //'{'出現次數
            }
            if((*p=='}') && (*(p+1) !=0x27)){
               if(flag_t1==0)flag_k2=1;
               ++flag_t2;      //'}'出現次數
            }
         }
      }
      // --------------------------------------------------------------------
      // '}'出現次數多于'{', 則此行縮進數減
      if(flag_t1<flag_t2){
         k-=(flag_t2-flag_t1);
      }
      // --------------------------------------------------------------------
      // 對于特殊寫法" } else { "的特別處理
      
      if(flag_t1==flag_t2){
         if(flag_t1==1)
            if(flag_k2==1)
               --k;
      }
      //----------------------------------------------------------------------
      // 每次讀入一行語句, 分析后寫入另一文件, 寫文件操作只有兩部分:
      // 1.寫入空格縮進 2.寫入省略行首空格的代碼部分
      // 不影響原來的風格或更改原來的程序結果, 因此雖然功能單一, 但足夠安全.
      
      if(m==1){                              // 單獨的地址標號行不縮進
         ;  
      }
      else if(flag_k3==1){                   // 編譯預處理暫不縮進
         ;
      }
      else if(flag_zhushi_e==0 || inorder_f1==2)
         for(i=0;i<k;++i)
            if(fputs("   ",fp3)==EOF)       // 在此更改每層縮進幾個空格
            {   
               printf("write error. \n");
               printf("write error. \n");
            }
      if(fputs(str,fp3)==EOF)
         printf("write error. \n");
      // --------------------------------------------------------------------
      // 含有/* */的多行注釋段段不縮進,直到注釋結束為止
      if(flag_zhushi==0)
         flag_zhushi_e=0;
      // --------------------------------------------------------------------
      // '{'的個數多于'}'的個數,則下一行縮進數加
      if(flag_t1>flag_t2){        // '{'出現次數多于'}',增加空格個數
         k+=(flag_t1-flag_t2);
      }
      // --------------------------------------------------------------------
      // 對于特殊寫法" } else { "的特別處理

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品免费在线观看| 成人av电影免费在线播放| 丰满少妇在线播放bd日韩电影| 91在线视频观看| 日韩女优毛片在线| 一区二区三区中文在线| 国产成人综合在线观看| 欧美一级淫片007| 亚洲最大色网站| 99re6这里只有精品视频在线观看| 91精品欧美久久久久久动漫| 日韩美女精品在线| 国产精品88888| 精品毛片乱码1区2区3区| 亚洲一区二区偷拍精品| 97精品久久久午夜一区二区三区| 精品国产乱码久久| 日韩高清不卡一区二区三区| 色丁香久综合在线久综合在线观看| 国产亚洲短视频| 精品午夜一区二区三区在线观看| 欧美日韩精品一区二区天天拍小说| 亚洲日本韩国一区| 99久久99久久久精品齐齐| 久久久精品国产免大香伊| 麻豆精品视频在线观看免费| 欧美美女喷水视频| 亚洲 欧美综合在线网络| 欧美在线视频你懂得| 亚洲激情中文1区| 色综合久久久久| 亚洲欧美日韩国产另类专区| 色综合久久九月婷婷色综合| 亚洲精品自拍动漫在线| 91在线国产福利| 亚洲精品第一国产综合野| 94-欧美-setu| 亚洲高清免费在线| 欧美精品少妇一区二区三区| 亚洲第一会所有码转帖| 欧美蜜桃一区二区三区| 奇米777欧美一区二区| 精品日韩一区二区三区免费视频| 久久精品国产亚洲a| 久久九九99视频| 成人午夜电影网站| 亚洲激情自拍偷拍| 欧美久久久久久久久久| 国产一区二区三区不卡在线观看| 久久久综合视频| 97久久精品人人做人人爽| 一区二区三区四区中文字幕| 欧美日韩久久不卡| 韩国一区二区三区| 最近日韩中文字幕| 欧美日韩久久一区二区| 经典三级视频一区| 亚洲特黄一级片| 欧美视频第二页| 国内精品视频666| 最新国产の精品合集bt伙计| 欧美疯狂做受xxxx富婆| 国产成人免费视频网站| 亚洲精品欧美二区三区中文字幕| 欧美精品在欧美一区二区少妇| 国产在线视频精品一区| 亚洲精品伦理在线| 欧美sm极限捆绑bd| 91网页版在线| 毛片av一区二区三区| 亚洲青青青在线视频| 91精品在线免费| 99久久婷婷国产综合精品电影| 亚洲不卡一区二区三区| 国产亚洲午夜高清国产拍精品| 色8久久人人97超碰香蕉987| 久久精品国产精品青草| 日韩理论电影院| 欧美一区二区播放| 色综合久久久久久久久| 国产成人8x视频一区二区| 亚洲成av人片观看| 亚洲色图在线视频| 欧美精品一区二区久久久| 欧洲色大大久久| av电影一区二区| 国产精品69久久久久水密桃 | 欧美在线看片a免费观看| 国产一区二区中文字幕| 亚洲午夜久久久久久久久电影院| 国产欧美日韩在线观看| 欧美一区二区三区播放老司机| 色综合久久久久综合99| 国产精品996| 精品在线观看视频| 日本不卡一区二区| 亚洲高清免费在线| 亚洲影院理伦片| 国产精品素人视频| 国产欧美日韩久久| 久久日一线二线三线suv| 欧美日韩国产高清一区二区| 一本一道久久a久久精品| eeuss国产一区二区三区| 国产一区二区三区免费在线观看 | 日韩毛片在线免费观看| 日本一区二区三区视频视频| 久久精品日韩一区二区三区| 精品免费一区二区三区| 精品久久久久久无| 久久久久久久久免费| 欧美草草影院在线视频| 日韩精品专区在线影院重磅| 欧美视频在线播放| 欧美日韩国产区一| 777a∨成人精品桃花网| 91精品久久久久久蜜臀| 日韩一区二区三区高清免费看看 | 美日韩一区二区| 日韩精品免费专区| 久久精品久久99精品久久| 国产一区二区在线视频| 精品日韩一区二区三区免费视频| 亚洲二区视频在线| 免费看精品久久片| 久久99精品国产麻豆不卡| 国产一区二区不卡| 成人动漫一区二区在线| 色狠狠一区二区三区香蕉| 69堂精品视频| 久久天堂av综合合色蜜桃网| 国产欧美一区视频| 亚洲日本韩国一区| 日本特黄久久久高潮| 国产精品正在播放| 91香蕉视频mp4| 制服丝袜一区二区三区| 久久久久97国产精华液好用吗| 中文字幕av一区二区三区高| 亚洲免费伊人电影| 奇米综合一区二区三区精品视频| 激情国产一区二区| 成+人+亚洲+综合天堂| 欧美日韩一区二区不卡| 精品福利一区二区三区免费视频| 国产欧美精品日韩区二区麻豆天美| 亚洲私人影院在线观看| 麻豆免费看一区二区三区| 成人免费观看男女羞羞视频| 欧美天天综合网| 久久综合久久综合久久| 亚洲激情校园春色| 狠狠色狠狠色综合日日91app| 不卡一区二区三区四区| 日韩一区二区在线免费观看| 国产欧美一区视频| 蜜桃在线一区二区三区| 91老师国产黑色丝袜在线| 欧美一级片免费看| 亚洲精品老司机| 国产电影一区二区三区| 欧美日韩国产精品成人| 亚洲欧洲日韩综合一区二区| 免费高清在线一区| 91久久精品国产91性色tv| 久久久久综合网| 日韩电影一二三区| 色综合欧美在线| 久久久久久99久久久精品网站| 亚洲亚洲人成综合网络| 不卡的av电影在线观看| 久久午夜国产精品| 视频精品一区二区| 在线观看区一区二| 亚洲欧美日韩国产一区二区三区| 国产一区二区三区不卡在线观看| 91精品久久久久久蜜臀| 亚洲v日本v欧美v久久精品| 91在线观看一区二区| 久久精品视频在线看| 美日韩一区二区| 欧美一区二区高清| 午夜精品久久久久久久久久久| 色综合夜色一区| 亚洲色图一区二区三区| 99国产精品久久久久久久久久| 欧美激情综合五月色丁香小说| 国产一区二区在线免费观看| 精品国产一二三区| 蜜乳av一区二区三区| 日韩女优av电影| 久久成人麻豆午夜电影| 日韩三级伦理片妻子的秘密按摩| 午夜亚洲福利老司机| 9191精品国产综合久久久久久| 亚洲成人资源在线| 日韩欧美国产综合一区| 另类小说视频一区二区| 久久综合色综合88| 国产成人在线视频免费播放|