提高项目31.2-将代码中的花括号换行输出

来源:互联网 发布:艾克里里淘宝店链接 编辑:程序博客网 时间:2024/04/25 15:15

任务和代码:读入一个C程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,新程序保存到另一个.c文件中,并在屏幕上显示处理过的程序,显示时加上行号

/*文件名:main.c作者:小风景完成日期:2016.7.12问题描述: 读入一个C程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,新程序保存到另一个.c文件中,并在屏幕上显示处理过的程序,显示时加上行号程序输出:*/#include <stdio.h>#include <string.h>#include <stdlib.h>void translateformat(char *source,char *destination);void showprogram(char *source);int main(){    char source[20] = "source.c";    char targrt[20] = "target.c";    translateformat(source,targrt);    printf("经过处理后的程序:\n");    showprogram(targrt);    return 0;}void translateformat(char *source,char *destination){    char info = 0;    char pre = '\0';    FILE *sourfp = NULL;    FILE *destfp = NULL;    if((sourfp = fopen(source,"r")) == NULL)    {        printf("open %s file error!\n",source);        exit(1);    }    if((destfp = fopen(destination,"w")) == NULL)    {        printf("open %s file error!\n",destination);        exit(1);    }    while((info = fgetc(sourfp)) != EOF)    {        if((info == '{' || info == '}') && pre != '\n') //前后都换行        {            fputc('\n',destfp);        }        if((pre == '{'|| pre == '}') && info != '\n')        {            fputc('\n',destfp);        }        fputc(info,destfp);        pre = info;    }    fclose(sourfp);    fclose(destfp);}void showprogram(char *source){    int number = 0;    char info[1024] = {0};    FILE *fp = NULL;    if((fp = fopen(source,"r")) == NULL)    {        printf("open %s file error!\n",source);        exit(1);    }    while(fgets(info,sizeof(info),fp))    {        number++;        printf("%d\t%s",number,info);    }}


程序运行结果:





总结:对于将括号独占一行需要注意花括号的特性,{}字符前后都有回车符,更具这个特性,在while循环中判定,当遇到花括号,判断前后是否为回车,如果不是则加上。

0 0
原创粉丝点击