51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3036|回复: 27
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 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++编译通过。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-5-13 19:43:47 | 只看该作者

回复 #1 keenling 的帖子

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

[ 本帖最后由 zlbox 于 2007-5-13 19:49 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-5-13 20:10:37 | 只看该作者
原帖由 zlbox 于 2007-5-13 19:43 发表
同学,我觉得你这个帖子标题太不好了,恃才傲物,别说是漂亮的女老师了,就算是一个普通的学生,被人起这样一个标题都会受不了的,我看了就受不了sdlkfj7
不管你多么有才华,也只能说,与老师商榷。你说对不?


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

使用道具 举报

该用户从未签到

5#
发表于 2007-5-13 21:50:18 | 只看该作者
就事论事的讨论问题是值得鼓励的,不过帖子的标题有些不妥。
sdlkfj2


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

使用道具 举报

该用户从未签到

6#
发表于 2007-5-13 21:58:03 | 只看该作者
呵呵,可能言者无心吧!
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-5-14 00:24:57 | 只看该作者
=.=||||||||标题有点........额........
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-5-14 00:51:50 | 只看该作者
楼主把程序考虑复杂了,如王琰老师所说,flag 其实本意是定义的一个常量,相当于一个布尔值,
楼主把flag看成了一个字符数组,是理解错误了。
针对一个简单的 求和函数,没有必要这样考虑。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2016-9-3 13:53
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2007-5-14 09:14:56 | 只看该作者
    flag只是一个变量啊老大
    看清楚程序
    变量和字符串这个王老师是不会搞错的吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2007-5-14 10:10:00 | 只看该作者
    原帖由 lovefei1027 于 2007-5-14 09:14 发表
    flag只是一个变量啊老大
    看清楚程序
    变量和字符串这个王老师是不会搞错的吧


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

    使用道具 举报

    该用户从未签到

    11#
    发表于 2007-5-14 12:45:04 | 只看该作者
    呵呵   ,  学的很认真阿  ,这些东西是应该在多去尝试发现,代码错误的话就是这些小细节引起的。
    不过也觉得标题语气稍微重了点。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 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;
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2007-5-15 15:48:35 | 只看该作者
    楼主同学学习很认真阿,这样挺好的

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

    使用道具 举报

    该用户从未签到

    14#
    发表于 2007-5-15 21:06:51 | 只看该作者
    楼主真是我们20期的人才啊,为楼主的认真而震撼sdlkfj5
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2007-5-15 22:27:44 | 只看该作者

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

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

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

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

    事情就是这样滴~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2007-5-16 10:44:13 | 只看该作者

    回复 #1 keenling 的帖子

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

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

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

    使用道具 举报

    该用户从未签到

    17#
    发表于 2007-5-16 11:34:51 | 只看该作者
    这种探讨学习的气氛非常好
    老师高兴还来不及
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2007-5-16 12:17:23 | 只看该作者
    百家争鸣!好久没来论坛了!!大家可好??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    20#
    发表于 2007-5-16 16:59:35 | 只看该作者
    有这时间干点别的啊。不过楼主的细心应该被大家学习。不过态度嘛,应该改进一下。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 22:41 , Processed in 0.084417 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表