读书人

实现一段代码怎么让代码尽可能实现预

发布时间: 2012-08-13 13:21:53 作者: rapoo

实现一段代码,如何让代码尽可能实现预期效果,和如何把所有尽可能多的可能考虑进代码中???
最近是一边写C代码,一边学C基础,中间出现一个编程的小纠结。

书籍是:《The C Programming Language(second edition)》



边写程序边加基础,这是目前的学习方式,

可是不知道是编程的时间多一点好,还是学习基础的时间多一点。

忘记在哪里看过一篇文章大概是说,编程时间要多,从编程中领会理论的知识。

可是,最近的学习状态是,看理论基础的时间多于写代码,

过程中,觉得这样学习并不好,相当于理论脱离实践。

可是,写程序,要如何写,才能把所有可能都解除让程序达到“完美”。



比方说,以下一个程序编写:(来自上述所提及的书籍)

编写一个程序,以每行一个单词的形式打印其输入。



一开始简单的考虑一般情况,但经过不断地输入不同情况时,发现问题所在。

是不是 所有的程序 要通过不断地编写 才可以把尽可能多的结果 考虑进程序内呢?

是不是每写一个程序要养成先思考再下手呢?

。。。求解!!~~



[解决办法]
看书->写程序->出错->思考->交流->解决错误->思考->看书->... ... 周期为:7,刚好一周, 呵呵
[解决办法]
首先,你要先看书,然后跟着书本上每一个实例都自己编写一次,编写的过程又是学习的过程,是积累的过程,学习别人良好的程序设计风格(风格最重要),然后多收集一些题目,尝试自己编写程序,并对照程序自己调试,并从中学到一些新的算法、风格以及逻辑思路。
[解决办法]
仅供参考

C/C++ code
#include <sys\stat.h>#include <io.h>#include <fcntl.h>#include <share.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <string.h>#define MAX_CLU_BYTES 65536FILE *fo;int fh;__int64 offs,offs1;__int64 rvi64;int rv,wrv;unsigned char buf[MAX_CLU_BYTES];char ofn[_MAX_PATH];char offstr[80];void strcpybutcomma(char *t,char *s) {    char c;    while (1) {        c = *s++;        if (','!=c) *t++ = c;        if (0==c) break;    }}void main(int argc,char **argv) {    if (argc<3) {        printf("Copy File Tail.\n");        printf("Usage:\n");        printf("    cft filename.ext offset_begin[-offset_end]\n");        printf("Copy filename.ext offset_begin[-offset_end] to offset_begin[-offset_end]-filename.ext\n");        printf("Note: Byte at offset_end is NOT included.\n");        printf("Example:\n");        printf("    cft abc.rar 12345\n");        printf("Copy abc.rar offset 12345-end to 12345-abc.rar\n");        printf("    cft abc.rar 123-12345\n");        printf("Copy abc.rar offset 123-12345 to 123-12345-abc.rar\n");        printf("    cft abc.rar 0xAB-0xCD\n");        printf("Copy abc.rar offset 0xAB-0xCD to 0xAB-0xCD-abc.rar\n");        return;    }    strcpybutcomma(offstr,argv[2]);    rv=sscanf(offstr,"%I64i-%I64i",&offs,&offs1);    if (rv==0) {        printf("offset %s is not number\n",argv[2]);        return;    }    fh=_sopen(argv[1],_O_BINARY|_O_RDONLY|_O_RANDOM,_SH_DENYWR);    if (fh==-1) {        printf("_sopen %s errno=%d\n",argv[1],errno);        return;    }    if (rv==1) {        offs1=_filelengthi64(fh);        if (offs1==-1i64) {            printf("%I64=_filelengthi64 errno=%d\n",offs1,errno);            _close(fh);            return;        }    } else {//rv==2        if (offs1<offs) {            printf("%s offset_begin>offset_end error\n",argv[2]);            _close(fh);            return;        }    }    rvi64=_lseeki64(fh,offs,SEEK_SET);    if (rvi64!=offs) {        printf("%I64u=_lseeki64 %I64u errno=%d\n",rvi64,offs,errno);        _close(fh);        return;    }    sprintf(ofn,"%s-",offstr);    strcat(ofn,argv[1]);    fo=fopen(ofn,"wb");    if (fo==NULL) {        _close(fh);        printf("fopen %s error\n",ofn);        return;    }    cprintf("\n%I64u\r",offs);    while (1) {        rv=_read(fh,buf,(unsigned int)__min(offs1-offs,MAX_CLU_BYTES));        if (rv==0) break;//        if (rv<0) {            fclose(fo);            _close(fh);            printf("_read %s offset %I64u error\n",argv[1],offs);            return;        }        wrv=fwrite(buf,1,rv,fo);        if (wrv!=rv) {            fclose(fo);            _close(fh);            printf("fwrite %s error\n",ofn);            return;        } else {            offs+=rv;            cprintf("%I64u\r",offs);            if (offs>=offs1) break;//        }    }    fclose(fo);    _close(fh);    printf("Copy %s offset %s to %s OK.\n",argv[1],argv[2],ofn);} 


[解决办法]
楼主的问题我可以分享几条经验与见解:

1, 看的书越多, 你越厉害, 毋庸置疑, 技多不压身, 年轻时候不多看书还指望老了再开始学吗, 所以你懂的。说不用看书的人是因为他们没耐心没习惯看书, 所以就出来误导别人, 你如果信了你就输了.

2, 编程一定是先在脑子里想好的,最起码你要有信心你的解决方案是合理的,可行的,其次你要习惯于在脑海里编程,把代码细节理顺清楚。 但并不是所有的问题都能把代码细节理得非常清楚, 但我相信如你一定能把伪代码写下来,所以我并不抵触在未完全理清的情况下动手,动手的过程其实也是梳理与发现问题的过程,但切忌直接动手,那是非常浪费生命的。

3,完美的程序首先是架构设计清晰,必须抽象出接口,抽象出数据结构,你最终的程序应该是一个白痴都能看懂的函数名,白痴都懂的参数与返回值,白痴照着函数说明都会调用。如何松耦合的设计,如果设计变与不变的程序架构,都是看你是不是看了足够多的优秀设计,是不是做了足够多的思考与总结,自己是否亲自实践过,有自己的什么心得体会,这种东西不是看书能学到的,应该去阅读优秀的开源代码模仿学习。
[解决办法]
没有完美的程序
如果一个程序员觉得自己的程序已经不需要再改了,那这个程序员的职业生命就到此为止了
[解决办法]
作为一个新手,我对楼上的各种说法持有不同意见。首先,书是要尽量多看的,特别是一些特别经典的书籍,这一点是勿庸置疑的。但是诸位说的先思考好在动手写代码,这个对新手是真心的不适合。因为新手掌握的东西有限,一开是写东西的时候,可能根本就没有任何想法,如果选择先思考好,再动手,往往会得出“我不会做”,或者是“太难了”的答案。我对于新手,就是想好一点写一点,中途发现不完美再就补充,这是比较适合的。虽然效率可能会低一些,但是对新手来说,这也是积累经验的一种好方法。

读书人网 >C语言

热点推荐