keenling 发表于 2007-5-13 14:15:36

王琰老师上课时的一处错误

我是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++编译通过。

zlbox 发表于 2007-5-13 19:43:47

回复 #1 keenling 的帖子

同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7
不管你多么有才华,也只能说,与老师商榷。你说对不?

[ 本帖最后由 zlbox 于 2007-5-13 19:49 编辑 ]

wangyan 发表于 2007-5-13 19:45:50

很高兴这位同学的学习态度很认真啊:)

那个程序段的例子我记得是,
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 编辑 ]

wangyan 发表于 2007-5-13 20:10:37

原帖由 zlbox 于 2007-5-13 19:43 发表 http://bbs.51testing.com/images/common/back.gif
同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7
不管你多么有才华,也只能说,与老师商榷。你说对不?

呵呵,谢谢这位学员了,老实说看到标题心里咯噔了一下:),不过关键还是看到大家在思考,这很好,这样学习才有效果。
希望大家多交流和讨论,如果老师上课中出现了一些错误,直接指出来没关系的。上了这么长时间课,一直在体会相教相学的含义啊。

songfun 发表于 2007-5-13 21:50:18

就事论事的讨论问题是值得鼓励的,不过帖子的标题有些不妥。
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;
...

wssgily 发表于 2007-5-13 21:58:03

呵呵,可能言者无心吧!

ZQ_83114 发表于 2007-5-14 00:24:57

=.=||||||||标题有点........额........

seifer1754 发表于 2007-5-14 00:51:50

楼主把程序考虑复杂了,如王琰老师所说,flag 其实本意是定义的一个常量,相当于一个布尔值,
楼主把flag看成了一个字符数组,是理解错误了。
针对一个简单的 求和函数,没有必要这样考虑。

lovefei1027 发表于 2007-5-14 09:14:56

flag只是一个变量啊老大
看清楚程序
变量和字符串这个王老师是不会搞错的吧

AlexanderIII 发表于 2007-5-14 10:10:00

原帖由 lovefei1027 于 2007-5-14 09:14 发表 http://bbs.51testing.com/images/common/back.gif
flag只是一个变量啊老大
看清楚程序
变量和字符串这个王老师是不会搞错的吧

再简单的东西,只要是人都会有出错的机会,有错不奇怪,记得教训,改正错误就行了。

陈建军 发表于 2007-5-14 12:45:04

呵呵   ,学的很认真阿,这些东西是应该在多去尝试发现,代码错误的话就是这些小细节引起的。
不过也觉得标题语气稍微重了点。

gzj_06 发表于 2007-5-15 13:32:26

强烈建议楼主更改标题

这里的flag可以(或者说应该)理解成一个字符变量,当然最好的方式是用王琰老师在上面说的宏定义的方式,比如:
#define INTEGERADD 0
int add_sub(char flag,int a,int b)
{
    if(flag==INTEGERADD)return a+b;
    else return a-b;
}

肚子 发表于 2007-5-15 15:48:35

楼主同学学习很认真阿,这样挺好的

不过这个标题我刚看到的时候,也咯噔了一下……汗一个 = =||

lytton 发表于 2007-5-15 21:06:51

楼主真是我们20期的人才啊,为楼主的认真而震撼sdlkfj5

jane.su 发表于 2007-5-15 22:27:44

替王琰老师平反——老师举例的那段code是正确的

我们20期的同学这么彪悍啊~~从标题看出来了。

我非常不赞成同学这样的态度,虽然能够认真思考是好事,可是做人还是低调些好。

为什么低调些呢?因为你上课没有认真听讲,嘿嘿,王琰老师举例的那段code没有错误。
你说的那个flag,实际上是INTEGERADD;课堂上,老师询问这段code有没有错误的时候,我怯生生地提出,那个INTEGERADD应该要+单引号的(现在看来,我提出的也是有问题的,因为如果加单引号更不对,因为是char型的);不过老师立即说,这个可以是别处定义过的;恩,想想确实,一般大写的基本都是提前定义过的全局变量,或者宏定义过的。

事情就是这样滴~~

zhong_z82 发表于 2007-5-16 10:44:13

回复 #1 keenling 的帖子

我认为楼主并不是恃才傲物,他只是把自己的想法阐述了出来。

王琰老师意在传递变量名,可能楼主那点没听到,以为是复值字符串,但就他的理解他下面重写的这段代码也是对的,对于楼主的这种态度值得我们20期的学员借鉴。

只是有些跟老师不同的观点可以提出来探讨,在没有结果之前不能说谁对谁错。

AlexanderIII 发表于 2007-5-16 11:34:51

这种探讨学习的气氛非常好
老师高兴还来不及

red-hat 发表于 2007-5-16 12:17:23

百家争鸣!好久没来论坛了!!大家可好??

Oh!My 发表于 2007-5-16 16:44:05

大家不要打击楼主同学的积极性呀。的确这是一个因为误解flag意图的小失物。不过钻研精神和敢于站出来的勇气值得嘉奖。程序本身没有什么问题。最多是书写格式改下更加符合企业代码规范。if语句的每个分支最好都用花括号括起来哪怕只有一句。这是我工作后才学到的规范。楼主也就是缺少了些实践经验,否则就应该知道flag是一个多么被频繁使用的“程序练习变量名”了。

xiaodong 发表于 2007-5-16 16:59:35

有这时间干点别的啊。不过楼主的细心应该被大家学习。不过态度嘛,应该改进一下。
页: [1] 2
查看完整版本: 王琰老师上课时的一处错误