| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2492 人关注过本帖
标题:如何把代码写的清晰,易理解。求高手分享写代码经验。
只看楼主 加入收藏
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:15 
如何把代码写的清晰,易理解。求高手分享写代码经验。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _STDC_WANT_LIB_EXT1_ 1
#define buffer_len 10
#define buffer_len_inc 5
#define string_cont 5
#define string_cont_inc 2

int main(void)
{

    int test_int = 0;    
    int buf_len = buffer_len;
    char* p_start =NULL;
    char* p_buf_temp = NULL;
    int current_buf_len = 0;
    char* p_buffer = NULL;

    char** str_dre_dre = NULL;
    char** str_dre_temp = NULL;
    char** str_start = NULL;
    int count = 0;
    int str_cont = string_cont;

    printf("input something you want : \n");

    //memory initialization

    str_dre_dre = (char**)malloc(str_cont * sizeof(char*));
        if(str_dre_dre == NULL)
        {
             printf("malloc() function error!!!\n");
             exit(1);
        }
    str_start = str_dre_dre;

    p_buffer = (char*)malloc(buf_len * sizeof(char));
       if(p_buffer == NULL)
       {
           printf("malloc() function error!!!\n");
           exit(1);
       }
    p_start = p_buffer;
    
    //memory initialization end

    do
    {
        p_buffer = p_start;
        fflush(stdin);
        do
        {
            *p_buffer = getchar(); 
            p_buffer++;
               if((p_buffer - p_start) == buf_len)   
               {
                   buf_len += buffer_len_inc;
                   p_buf_temp = (char*)realloc(p_start, buf_len * sizeof(char));
                      if(p_buf_temp == NULL)
                      {
                          printf("realloc() function error!!!\n"); 
                          exit(1);
                      }
                   p_buffer = p_buf_temp + (p_buffer - p_start);
                   p_start = p_buf_temp;
                   p_buf_temp = NULL;
               }
        }
        while(*(p_buffer - 1) != '\n');

        if(*(p_start) == '\n' )
        {// if don't input anything
            printf("you don't input anything!!!\n");
            break;
        }
        *(p_buffer - 1) = '\0';
   
        current_buf_len = strlen(p_start);
        
        *(str_dre_dre + count) = (char*)malloc(current_buf_len);
            if(*(str_dre_dre + count) == NULL)
            {
                printf("malloc() function error!!!\n");
                exit(1);
            }   
         test_int = strcpy_s(*(str_dre_dre + count), current_buf_len + 1, p_start);
            if(test_int != 0)
            {
                printf("strcpy_s() function error!!!\n");
                exit(1);
            } 

        if(count == str_cont - 1)
        {
            str_cont += string_cont_inc;
            str_dre_temp = (char**)realloc(str_start, str_cont * sizeof(char*));
                if(str_dre_temp == NULL)
                {
                     printf("realloc() function error!!!\n");
                     exit(1);
                 }
            str_dre_dre = str_dre_temp;
            str_start = str_dre_temp;
            str_dre_temp = NULL;
        }
        count++;
                
        printf("you are already input %d string%s.\n",count, (count == 1) ? "" : "s");
        printf("continue?(Y/N)");
        fflush(stdin);      
   }
    while(tolower((char)getchar()) == 'y');
    printf("ouput strings: \n");
    for(int i = 0; i < count; ++i)
    {
        printf("%s\n", *(str_start + i));
        free(*(str_start + i));
        *(str_start + i) = NULL;
    }
    
    free(p_buffer);
    free(str_dre_dre);
    p_buffer = p_start = NULL;
    str_start = str_dre_dre = NULL;


    return 0;
}

我写了一个可以输入任意个字符串,同时字符串长度不收限制的小程序。代码能工作,稳定。但是感觉看起来惨不忍睹,逻辑混乱,思路不清晰,感觉像一坨屎,怎么把代码写的优美一点。希望高手支招,或者介绍书籍也可以。
搜索更多相关主题的帖子: 如何 color 
2015-04-03 13:03
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
收藏
得分:0 
2015-04-03 13:07
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:5 
分模块呗!!!
具体大概就是将你的函数的所有实现部分都写成若干个子函数。
main函数简明扼要。只是调用子函数,实现功能即可。
通常将你的main函数写在最前面。在main函数前面声明子函数。
这样代码看起来结构层次分明,逻辑清晰。一目了然。

个人拙见。坐等大神补充!!!

授人以鱼,不如授人以渔
2015-04-03 14:10
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:5 
可以输入任意个字符串,同时字符串长度不受限制


这样的要求 不建议用malloc来分配内存空间存储数据
不断的分配不确定长度的内存 可能会使程序的运行效率低下
直接使用文件 虽然效率也不高 但程序更简单可控

程序代码:
#include <stdio.h>

void eat_line(void);
void write_file(FILE *);
void print_file(FILE *);

int main(void) {
    char c;
    FILE *fp = tmpfile();

    if(!fp) return 1;

    do {
        write_file(fp);
        putc('\n', fp);
        puts("continue? (Y/N)");
        c = getchar();
        eat_line();
    } while(c == 'Y' || c == 'y');

    puts("ouput strings:");
    rewind(fp);
    print_file(fp);
    return 0;
}

void eat_line(void) {
    while(getchar() != '\n')
        continue;
}

void write_file(FILE *fp) {
    int c;

    while((c = getchar()) != EOF && c != '\n')
        putc(c, fp);
}

void print_file(FILE *fp) {
    int c;

    while(!feof(fp))
        while((c = getc(fp)) != EOF)
            putchar(c);
}

修正了一下
临时文退出程序时会自动被关闭 不必显式关闭
write函数去除了换行的重复判断

再次修改了一下
把一些程序功能块写成了函数 也算是为了培养模块化的编程习惯吧

[ 本帖最后由 longwu9t 于 2015-4-3 15:21 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2015-04-03 14:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
低手飘过

总有那身价贱的人给作业贴回复完整的代码
2015-04-03 14:24
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
....tepfile()  第一次见

[ 本帖最后由 code力力 于 2015-4-3 18:27 编辑 ]

你醒了?快起来敲代码!!
2015-04-03 18:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我推荐过书的,《代码大全》,学编程的没看过这本书,等于没学。

授人以渔,不授人以鱼。
2015-04-03 18:24
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
书好多,好多要看,真正学起来觉得时间不够,要是白天24小时就好了

电脑里保存了一些PDF,手头也有几本书正在啃。


你醒了?快起来敲代码!!
2015-04-03 18:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在电脑上看PDF很难看得下去,更别说在手机上了。书还是纸质的好,整天对着电脑干嘛,上厕所的时候也能看。

授人以渔,不授人以鱼。
2015-04-03 18:49
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
是啊,我也不想看PDF,只是有些经典书都绝版了,买不到。

你醒了?快起来敲代码!!
2015-04-03 19:06
快速回复:如何把代码写的清晰,易理解。求高手分享写代码经验。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029920 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved