如何把代码写的清晰,易理解。求高手分享写代码经验。

程序代码:

#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;
}

我写了一个可以输入任意个字符串,同时字符串长度不收限制的小程序。代码能工作,稳定。但是感觉看起来惨不忍睹,逻辑混乱,思路不清晰,感觉像一坨屎,怎么把代码写的优美一点。希望高手支招,或者介绍书籍也可以。

http://blog.tianya.cn/post-5285480-82795215-1.shtml
http://blog.tianya.cn/post-5285480-82795220-1.shtml
http://blog.tianya.cn/post-5285480-82795225-1.shtml
http://blog.tianya.cn/post-5285480-82795233-1.shtml
http://blog.tianya.cn/post-5285480-82795240-1.shtml
http://blog.tianya.cn/post-5285480-82795245-1.shtml
http://blog.tianya.cn/post-5285480-82795251-1.shtml
http://blog.tianya.cn/post-5285480-82795254-1.shtml
http://blog.tianya.cn/post-5285480-82795261-1.shtml
http://blog.tianya.cn/post-5285480-82795266-1.shtml
http://blog.tianya.cn/post-5285480-82795270-1.shtml
http://blog.tianya.cn/post-5285480-82795277-1.shtml
http://blog.tianya.cn/post-5285480-82795283-1.shtml
http://blog.tianya.cn/post-5285480-82795291-1.shtml
http://blog.tianya.cn/post-5285480-82795303-1.shtml
http://blog.tianya.cn/post-5285480-82795310-1.shtml
http://blog.tianya.cn/post-5285480-82795322-1.shtml
http://blog.tianya.cn/post-5285480-82795334-1.shtml
http://blog.tianya.cn/post-5285480-82795352-1.shtml
http://blog.tianya.cn/post-5285480-82795362-1.shtml
http://blog.tianya.cn/post-5285480-82795385-1.shtml
http://blog.tianya.cn/post-5285480-82795391-1.shtml
http://blog.tianya.cn/post-5285480-82795400-1.shtml
http://blog.tianya.cn/post-5285480-82795411-1.shtml
http://blog.tianya.cn/post-5285480-82795417-1.shtml
http://blog.tianya.cn/post-5285480-82795426-1.shtml
http://blog.tianya.cn/post-5285480-82795431-1.shtml
http://blog.tianya.cn/post-5285480-82795441-1.shtml
http://blog.tianya.cn/post-5285480-82795453-1.shtml
http://blog.tianya.cn/post-5285480-82795459-1.shtml
http://blog.tianya.cn/post-5285480-82795465-1.shtml
http://blog.tianya.cn/post-5285480-82795471-1.shtml
http://blog.tianya.cn/post-5285480-82795478-1.shtml
http://blog.tianya.cn/post-5285480-82795482-1.shtml
http://blog.tianya.cn/post-5285480-82795487-1.shtml
http://blog.tianya.cn/post-5285480-82795495-1.shtml
http://blog.tianya.cn/post-5285480-82795506-1.shtml
http://blog.tianya.cn/post-5285480-82795518-1.shtml
http://blog.tianya.cn/post-5285480-82795525-1.shtml
http://blog.tianya.cn/post-5285480-82795538-1.shtml
http://blog.tianya.cn/post-5285480-82795548-1.shtml

时间: 2024-07-30 10:44:54

如何把代码写的清晰,易理解。求高手分享写代码经验。的相关文章

我需要完全理解这部分代码才能确保它能够正常工作,如果由我来修复代码中的问题,我是不会这么写的,因此希望你也不要这么来写(转)

Jim Bird是一位经验丰富的软件开发经理.项目经理与CTO,专注于软件开发与维护.软件质量与安全等领域中疑难问题的解决.在过去的15年间,Jim曾管理过团队建设并主导过高性能的财务系统的建设.他的主要兴趣在于如何提升小团队的效率以构建真正的软件:高质量.安全.可靠.高性能及适应性强.近日,Jim撰写了一篇博文,谈到了代码审查的价值,如何进行代码审查,代码审查的过程以及在代码审查中需要注意的问题,希望能为大家平日的代码审查带来一些启示. 开始代码审查 从一开始,开发者就会互相帮助,如果测试中遇

Raft 为什么是更易理解的分布式一致性算法

Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息.在战争的时候,拜占庭军队内所有将军必需达成 一致的共识,决定是否有赢的机会才去攻打敌人的阵营.但是,在军队内

【转】Raft 为什么是更易理解的分布式一致性算法

编者按:这是看过的Raft算法博客中比较通俗的一篇了,讲解问题的角度比较新奇,图文并茂,值得一看.原文链接:Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息.

【转载】Raft 为什么是更易理解的分布式一致性算法

一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息.在战争的时候,拜占庭军队内所有将军必需达成 一致的共识,决定是否有赢的机会才去攻打敌人的阵营.但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又

Android 手写Binder 教你理解android中的进程间通信

关于Binder,我就不解释的太多了,网上一搜资料一堆,但是估计还是很多人理解的有困难.今天就教你如何从 app层面来理解好Binder. 其实就从我们普通app开发者的角度来看,仅仅对于android应用层的话,Binder就是客户端和服务端进行通信的媒介. AIDL就是我们理解Binder 最好的事例. 我们都知道 我们写好aidl 文件以后,开发工具 会自动帮我们生成好代码.实际上 我们最终apk里面 是只有这些代码的,我们写的aidl文件 是不会被打包进去的,也就是说aidl文件 实际上

当程序员说“这代码写的可真烂”,他们的意思是“这烂代码不是我写的”。而当他们说这段代码有些“小问题”时,很可能这代码是他们自己写的

英文原文:What Programmers Say vs. What They Mean 你是否听到过同事说“这段代码不言自明”?你的同事的这句话的实际意思是这段代码不需要写注释. 你也许注意到了,很多时候,程序员所说的话的字面意思和其真实的意思是完全不同的.不用惊异,下面你将很快知道这些暧昧的短语和其深层次的意思都是什么. 最近 Imgur 上出现了一张图片,里面列举的程序员的一些专业术语和其含义,它能很好的帮助你理解这些话的真实意思.这里是对其中的精华进行的总结. 典型的程序员之间的对话 当

Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。

转自:http://www.cnblogs.com/mindwind/p/5231986.html Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然发散的比较多,相对冗长.读完后掩卷沉思觉得还是整理一下才会更牢靠,变成真正属于自己的.这里我就借助前面黑白棋落子里第一种极简思维来描述和概念验证下 Raft 协议的工作方式. 在一个由 Raft 协议组织的集群中有三类角色: Leader(领袖) Follower(群众) Candidate(候选人

Unity CG 写一个超酷的 ray-marching(shader纯代码写3D)

Unity CG 写一个超酷的 ray-marching(shader纯代码写3D) 1.其实自从看了http://www.shadertoy.com(inigo quilez为其主创始人)上的shader后,让我感到很高兴 2.更重要的是自从我接触了一个叫 inigo quilez 的shader技术后,让我觉得shader情感更深的浓厚了 3.http://www.iquilezles.org/ 哈哈,当然给大家一个崇拜的机会吧,你一定会学到你想学到的技术和秘密 哈哈,邪恶的专栏地址放送,一

最易理解的qsort排序算法

快速排序算法程序可以写得千奇百怪,但最易理解的个人认为仍是下面的: #include<stdio.h> #include<time.h> #include<stdlib.h> void swap(int *a ,int *b) { int t = *a; *a = *b; *b = t; } int partition(int array[],int l,int r) { int pivot = array[r]; int curpos = l; int j ; for