//********************************************
创建时间:2014年9月24日星期三
创建作者:XXX
//********************************************
本文档是我在阅读《抛弃C程序设计中的谬误与恶习》的一些学习笔记,觉得好的地方值得借鉴和编程,就写了下来,如果你有幸看到,并认为我所写值得你的反思和编程,那我所做的就是一件好事,值得快乐的事。
“以代码会友”
1、一个良好的输入代码
While(scanf() , n<=0 || n> M)
类似于上面的代码,平时写的比较少,非常有用,在做项目或写算法时完全可以用的到
较之以前的写法,就非常的麻烦或者啰嗦,往往需要用多行语句来完成,而上面代码只需要一句即可。
2、从求10个学生的平均成绩这个程序来看编程过程中的一些细节
书中写到的错误叫做”颗粒度不均匀”。什么意思呢?
比如我写这样一段代码:
Int main()
{
Int a = 0;
If(a != 0)
{
Printf(“yes\n”);
}
else
printf(“no\n”);
return 0;
}
上面的代码就是颗粒度不均匀,意思就是在层次上一样的代码在写法上不一致。,表现就是{}的区别。
而在求10个学生的平均成绩的程序中,同样是这个问题,就是输入10个学生成绩在main()函数中实现,而求平均成绩和打印成绩却在别的函数中实现,这就成为了一种颗粒度不均匀的现象,也叫做“粗中有细”。
而真正的代码风格应该是输入也要封装在一个函数中。
大致过程如下:
以上代码好的地方在于:
数据结构简单,char c , 他不会漏掉统计回车换行符号,另外不用担心gets()带来的越界问题,并且不限于一行的个数
而gets()是有限制条件的。
针对gets()函数:少用,最好不用,取代的可以用fgets()
所以一个字符串的输出可以用ch = getchar()代替
4、舍近求远
比如经常见到的:把一个数组中的字符串拷贝到另一个数组中
问题是经常是代码啰嗦
完全可以这样精简:
While( (*p1++ = *p2++) != ‘\0’)