51Testing软件测试论坛

标题: 王琰老师上课时的一处错误 [打印本页]

作者: keenling    时间: 2007-5-13 14:15
标题: 王琰老师上课时的一处错误
我是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
标题: 回复 #1 keenling 的帖子
同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7
不管你多么有才华,也只能说,与老师商榷。你说对不?

[ 本帖最后由 zlbox 于 2007-5-13 19:49 编辑 ]
作者: wangyan    时间: 2007-5-13 19:45
很高兴这位同学的学习态度很认真啊:)

那个程序段的例子我记得是,
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
原帖由 zlbox 于 2007-5-13 19:43 发表
同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7
不管你多么有才华,也只能说,与老师商榷。你说对不?


呵呵,谢谢这位学员了,老实说看到标题心里咯噔了一下,不过关键还是看到大家在思考,这很好,这样学习才有效果。
希望大家多交流和讨论,如果老师上课中出现了一些错误,直接指出来没关系的。上了这么长时间课,一直在体会相教相学的含义啊。
作者: songfun    时间: 2007-5-13 21:50
就事论事的讨论问题是值得鼓励的,不过帖子的标题有些不妥。
sdlkfj2


原帖由 keenling 于 2007-5-13 14:15 发表
我是20期学员,上单元测试时,记得王琰老师为了举例程序耦合度应当降低,这样可以实源程序代码的复用性提高,写出过一段代码。大致上是:
int count(char c,int a,int b)
{
    if(c==flag)  return a+b;
  ...

作者: wssgily    时间: 2007-5-13 21:58
呵呵,可能言者无心吧!
作者: ZQ_83114    时间: 2007-5-14 00:24
=.=||||||||标题有点........额........
作者: seifer1754    时间: 2007-5-14 00:51
楼主把程序考虑复杂了,如王琰老师所说,flag 其实本意是定义的一个常量,相当于一个布尔值,
楼主把flag看成了一个字符数组,是理解错误了。
针对一个简单的 求和函数,没有必要这样考虑。
作者: lovefei1027    时间: 2007-5-14 09:14
flag只是一个变量啊老大
看清楚程序
变量和字符串这个王老师是不会搞错的吧
作者: AlexanderIII    时间: 2007-5-14 10:10
原帖由 lovefei1027 于 2007-5-14 09:14 发表
flag只是一个变量啊老大
看清楚程序
变量和字符串这个王老师是不会搞错的吧


再简单的东西,只要是人都会有出错的机会,有错不奇怪,记得教训,改正错误就行了。
作者: 陈建军    时间: 2007-5-14 12:45
呵呵   ,  学的很认真阿  ,这些东西是应该在多去尝试发现,代码错误的话就是这些小细节引起的。
不过也觉得标题语气稍微重了点。
作者: gzj_06    时间: 2007-5-15 13:32
标题: 强烈建议楼主更改标题
这里的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
楼主同学学习很认真阿,这样挺好的

不过这个标题我刚看到的时候,也咯噔了一下……汗一个 = =||
作者: lytton    时间: 2007-5-15 21:06
楼主真是我们20期的人才啊,为楼主的认真而震撼sdlkfj5
作者: jane.su    时间: 2007-5-15 22:27
标题: 替王琰老师平反——老师举例的那段code是正确的
我们20期的同学这么彪悍啊~~从标题看出来了。

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

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

事情就是这样滴~~
作者: zhong_z82    时间: 2007-5-16 10:44
标题: 回复 #1 keenling 的帖子
我认为楼主并不是恃才傲物,他只是把自己的想法阐述了出来。

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

只是有些跟老师不同的观点可以提出来探讨,在没有结果之前不能说谁对谁错。
作者: AlexanderIII    时间: 2007-5-16 11:34
这种探讨学习的气氛非常好
老师高兴还来不及
作者: red-hat    时间: 2007-5-16 12:17
百家争鸣!好久没来论坛了!!大家可好??
作者: Oh!My    时间: 2007-5-16 16:44
大家不要打击楼主同学的积极性呀。的确这是一个因为误解flag意图的小失物。不过钻研精神和敢于站出来的勇气值得嘉奖。程序本身没有什么问题。最多是书写格式改下更加符合企业代码规范。if语句的每个分支最好都用花括号括起来哪怕只有一句。这是我工作后才学到的规范。楼主也就是缺少了些实践经验,否则就应该知道flag是一个多么被频繁使用的“程序练习变量名”了。
作者: xiaodong    时间: 2007-5-16 16:59
有这时间干点别的啊。不过楼主的细心应该被大家学习。不过态度嘛,应该改进一下。
作者: v_v    时间: 2007-5-16 18:44
学习是应该这样很认真对待每个小的细节,很感慨有楼主这么仔细的同学了,呵呵...其实标题是有点不人情化,我们应该探讨问题是对的,不过也要注意下方法......
作者: 三碗猪脚    时间: 2007-5-17 19:50
原帖由 v_v 于 2007-5-16 18:44 发表
学习是应该这样很认真对待每个小的细节,很感慨有楼主这么仔细的同学了,呵呵...其实标题是有点不人情化,我们应该探讨问题是对的,不过也要注意下方法......

顶下~
作者: lifego    时间: 2007-5-17 22:20
我觉得楼主挺有勇气的...sdlkfj3
作者: lifego    时间: 2007-5-17 22:21
而且很用功和用心...向他学习!
作者: yukisure    时间: 2007-5-17 22:56
标题: 回复 #15 jane.su 的帖子
ding~~
我觉得首先是这位同学上课有疏忽吧
在没把问题搞清楚前,不好乱发表言论喔
学习精神值得褒奖,但是这种形式提出问题也不利于你以后的职业发展吧

建议你换标题吧
作者: ruth    时间: 2007-5-20 09:59
看到这个帖子,先是震惊后是欣慰再后是感慨!震惊是因为标题的严重性,欣慰是因为楼主的误解和大家认真学习的态度,感慨是因为说话的技巧.
作者: wangxiu836    时间: 2007-5-22 21:37
除了标题的问题,其实楼主还是蛮强的~~
不过我还是觉得你应该先跟老师单独问一下这个问题~~~
嘿嘿
作者: jiohi    时间: 2007-5-22 23:09
当场写的代码毕竟或多或少的有点小问题,一下就看出来了,厉害啊  看来你做测试能做的不错




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2