📄 inorder_.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 + -