王琰老师上课时的一处错误
我是20期学员,上单元测试时,记得王琰老师为了举例程序耦合度应当降低,这样可以实源程序代码的复用性提高,写出过一段代码。大致上是:int count(char c,int a,int b)
{
if(c==flag)return a+b;
else return a-b;
}
老师说这段代码本身没有错误
但要完成+和-的功能,尽量用2个函数执行。可事实上这段代码有一个细节错误。
我们知道char型是字符型存储变量,只能存储一个字节的变量,而这里的c==flag显然不能满足条件,更何况字符型变量应当用‘’括起来,字符串则应当用“”括起来。本人特地用dev-c++编写程序试了一下这段代码,果然编译报错。正确的调用方式,应当把char c改成字符串传递:
#include <stdio.h>
#include <cstdlib>
int count(char *c,int a,int b)
{
if(c=="flag")return a+b;
else return a-b;
}
main()
{
char *c="flag";
int a=2,b=3,out;
out=count(c,a,b);
printf("%d",out);
system("pause");
}
字符串是通过字符数组存储的,把char c,改成char *c,初始化成“flag”,函数部分再改成*c的传地址调用,再添上“”号就没有问题了。
以上程序通过Dec-C++编译通过。
回复 #1 keenling 的帖子
同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7不管你多么有才华,也只能说,与老师商榷。你说对不?
[ 本帖最后由 zlbox 于 2007-5-13 19:49 编辑 ] 很高兴这位同学的学习态度很认真啊:)
那个程序段的例子我记得是,
int add_sub(char flag,int a,int b)
{
if(flag==INTEGERADD)return a+b;
else return a-b;
}
原意这里的flag不是要传递的字符串,而是变量名。INTEGERADD可以自定义,例如可以#define INTEGERADD 0。
[ 本帖最后由 wangyan 于 2007-5-13 21:06 编辑 ] 原帖由 zlbox 于 2007-5-13 19:43 发表 http://bbs.51testing.com/images/common/back.gif
同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7
不管你多么有才华,也只能说,与老师商榷。你说对不?
呵呵,谢谢这位学员了,老实说看到标题心里咯噔了一下:),不过关键还是看到大家在思考,这很好,这样学习才有效果。
希望大家多交流和讨论,如果老师上课中出现了一些错误,直接指出来没关系的。上了这么长时间课,一直在体会相教相学的含义啊。 就事论事的讨论问题是值得鼓励的,不过帖子的标题有些不妥。
sdlkfj2
原帖由 keenling 于 2007-5-13 14:15 发表 http://bbs.51testing.com/images/common/back.gif
我是20期学员,上单元测试时,记得王琰老师为了举例程序耦合度应当降低,这样可以实源程序代码的复用性提高,写出过一段代码。大致上是:
int count(char c,int a,int b)
{
if(c==flag)return a+b;
... 呵呵,可能言者无心吧! =.=||||||||标题有点........额........ 楼主把程序考虑复杂了,如王琰老师所说,flag 其实本意是定义的一个常量,相当于一个布尔值,
楼主把flag看成了一个字符数组,是理解错误了。
针对一个简单的 求和函数,没有必要这样考虑。 flag只是一个变量啊老大
看清楚程序
变量和字符串这个王老师是不会搞错的吧 原帖由 lovefei1027 于 2007-5-14 09:14 发表 http://bbs.51testing.com/images/common/back.gif
flag只是一个变量啊老大
看清楚程序
变量和字符串这个王老师是不会搞错的吧
再简单的东西,只要是人都会有出错的机会,有错不奇怪,记得教训,改正错误就行了。 呵呵 ,学的很认真阿,这些东西是应该在多去尝试发现,代码错误的话就是这些小细节引起的。
不过也觉得标题语气稍微重了点。
强烈建议楼主更改标题
这里的flag可以(或者说应该)理解成一个字符变量,当然最好的方式是用王琰老师在上面说的宏定义的方式,比如:#define INTEGERADD 0
int add_sub(char flag,int a,int b)
{
if(flag==INTEGERADD)return a+b;
else return a-b;
} 楼主同学学习很认真阿,这样挺好的
不过这个标题我刚看到的时候,也咯噔了一下……汗一个 = =|| 楼主真是我们20期的人才啊,为楼主的认真而震撼sdlkfj5
替王琰老师平反——老师举例的那段code是正确的
我们20期的同学这么彪悍啊~~从标题看出来了。我非常不赞成同学这样的态度,虽然能够认真思考是好事,可是做人还是低调些好。
为什么低调些呢?因为你上课没有认真听讲,嘿嘿,王琰老师举例的那段code没有错误。
你说的那个flag,实际上是INTEGERADD;课堂上,老师询问这段code有没有错误的时候,我怯生生地提出,那个INTEGERADD应该要+单引号的(现在看来,我提出的也是有问题的,因为如果加单引号更不对,因为是char型的);不过老师立即说,这个可以是别处定义过的;恩,想想确实,一般大写的基本都是提前定义过的全局变量,或者宏定义过的。
事情就是这样滴~~
回复 #1 keenling 的帖子
我认为楼主并不是恃才傲物,他只是把自己的想法阐述了出来。王琰老师意在传递变量名,可能楼主那点没听到,以为是复值字符串,但就他的理解他下面重写的这段代码也是对的,对于楼主的这种态度值得我们20期的学员借鉴。
只是有些跟老师不同的观点可以提出来探讨,在没有结果之前不能说谁对谁错。 这种探讨学习的气氛非常好
老师高兴还来不及 百家争鸣!好久没来论坛了!!大家可好?? 大家不要打击楼主同学的积极性呀。的确这是一个因为误解flag意图的小失物。不过钻研精神和敢于站出来的勇气值得嘉奖。程序本身没有什么问题。最多是书写格式改下更加符合企业代码规范。if语句的每个分支最好都用花括号括起来哪怕只有一句。这是我工作后才学到的规范。楼主也就是缺少了些实践经验,否则就应该知道flag是一个多么被频繁使用的“程序练习变量名”了。 有这时间干点别的啊。不过楼主的细心应该被大家学习。不过态度嘛,应该改进一下。
页:
[1]
2