?? temp2.c
字號:
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 + -