马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
根据大部分新手的需求,以及之前提到的十四大常见语法错误再次进行总结,帮助新手快速处理语法错误。我想在有了第三章提到的编程十要素以及这里的语法纠正,相信很多新手都能慢慢进入到TC编程的领域了,在此祝大家能学有所成,快速变成编程高手!
一、语法配对问题:
这里提到的配对也就是说有前必有后,在整个代码中他们是相辅相成、缺一不可的,那么常见的这些语法有哪些呢?
1、if(如果)语句、while(循环)语句、select(选择)语句、repeat(重复)语句、for(遍历)语句---(流程语句);
2、命名空间定义语句、函数。
在以上这些语句中他们的格式是必须要配对的,下面我们通过一个正反事例来进行说明:
正确语句:
- int mark
- if(mark==0)
- help.messagebox("mark等于0")
- else
- help.messagebox("mark不等于0")
- endif
- 或
- 整型 标记
- 如果(标记==0)
- 辅助.消息框("标记等于0")
- 否则
- 辅助.消息框("标记不等于0")
- 如果结束
复制代码 错误语句:
- int mark
- if(mark==0)
- help.messagebox("mark等于0")
- else
- help.messagebox("mark不等于0")
- 或
- 整型 标记
- 如果(标记==0)
- 辅助.消息框("标记等于0")
- 否则
- 辅助.消息框("标记不等于0")
复制代码 注:在此缺少了if(如果)语句的结束语:endif或如果结束 ,错误语句在启动调试会在输出框弹出错误信息:发现没定义的字符’功能结束‘
总结:从上面的例子可以看出流程语句的配对,在编程中是必不可少的一部分,一旦缺少则无法编译通过生成EXE。他们就相当于有开始就有结束,再如:命名空间定义语句,有namespace(空间) 就有endnamespace(空间结束);函数,有函数的定义就有函数的返回值以及函数的结束。所以在以后的编程过程遇到了编译不通过就可以进行这方面的检查,看是否是由于粗心忘记写了,导致这一问题的发生。
二、层次问题:
很多新手,在初次学习的时候由于没有弄明白层次问题,导致各种问题的产生:
下面也通过一个实例说明:
- 空间 教程//定义默认空间
- 整型 标记
- 如果(标记==0)
- 辅助.消息框("标记等于0")
- 否则
- 辅助.消息框("标记不等于0")
- 如果结束
- 功能 逻辑型 开始_点击()
- 返回 真 //函数返回语句
- 功能结束
- 空间结束 //空间结束语句
复制代码 进行编译,错误提示:发现没定义的字符'如果(标记==0)' ,新手一看到这个错误就说,我这配对没有问题啊,怎么还提示这个呢?
从这个例子中我们可以看出,新手根本没有弄明白命令应该往什么地方写,导致将语句放置了函数外。而正确的例子应该是这样的:
- 空间 教程//定义默认空间
- 功能 逻辑型 开始_点击()
- 整型 标记
- 如果(标记==0)
- 辅助.消息框("标记等于0")
- 否则
- 辅助.消息框("标记不等于0")
- 如果结束
- 返回 真 //函数返回语句
- 功能结束
- 空间结束 //空间结束语句
复制代码 总结:函数应该在空间里面,而编写的命令应该在函数的里面,定义的变量应该在空间里面。
三、符号问题:
在TC编程中,我们知道TC是可以中英文进行编程的(即可英文编程又可中文编程),而在符号问题方面,TC依旧是采用了英文符号,并非是在中文输入法下输入的符号。
下面我们也通过一个例子说明:
- 空间 教程//定义默认空间
- 功能 逻辑型 开始_点击()
- 整型 标记
- 如果(标记==0) //这里出错了!!!
- 辅助.消息框("标记等于0")
- 否则
- 辅助.消息框("标记不等于0")
- 如果结束
- 返回 真 //函数返回语句
- 功能结束
- 空间结束 //空间结束语句
复制代码 启动编译后,错误提示:当前条件表达式'(标记==0)'没有用成对的括号括起来或者是'('(闭括号)后出现多余符号
从这一例子中我们得到正确的答案是括号应该是英文状态下输入的括号,若是中文输入则会直接报错,那么在以后编程中大家就需要注意区分符号是否用错了导致这一问题的发生,需要区分的常见符号有:逗号(,)、小括号(())。
四、数据类型问题:
在我们进行数据的赋值以及定义函数时就需要考虑到数据类型的问题,他们可以说也是需要配对的,如:
- 整型 标记1=3,标记2=4 //[定义2个整型变量分别给赋值]
- 字符型 标记 //[定一个字符型变量]
- 标记 = 标记1 + 标记2 //[理想状态下认为:标记1和标记2相加的值赋给标记这个变量]
复制代码 启动编译后,错误提示:'标记 = 标记1 + 标记2'等号两边数据类型不一致
从上面的代码中我们可以得知,当两个类型一样的数据进行相加时这是可以的,而将他们相加的值赋给一个数据类型是字符型的变量是不行的,会产生数据类型不一致。前面提到了为什么数据类型相加是可以的,因为通过优先级可以知道,程序先运行了相加之后再赋值的,而在编译的时候提示的是赋值这里出错了,所以相加是没有问题的。
那么我们应该如果进行改正呢?
方法一:(通过改变标记这个变量的数据类型达到了这一目的)
- 整型 标记1=3,标记2=4 //[定义2个整型变量分别给赋值]
- 整型 标记 //[定一个整型变量] 这里进行变换
- 标记 = 标记1 + 标记2 //[标记1和标记2相加的值赋给标记这个变量]
复制代码 方法二:(通过将他们相加的值进行数据类型转换达到这一目的)
- 整型 标记1=3,标记2=4 //[定义2个整型变量分别给赋值]
- 字符型 标记 //[定一个字符型变量]
- 标记 = 转换.整型转字符型(标记1 + 标记2) //[标记1和标记2相加的值进行转换后再赋给标记这个变量]
复制代码 我们不仅仅在变量方面要注意到数据的类型,在函数我们也需要注意到这些问题,下面我们看一个函数的例子:
- 功能 整型 两数相加()
- 整型 数据1,数据2,总数 //定义三个整型数据变量,前2个用于相加,后面这个用于接收他们的和
- 数据1 = 10 //给数据1赋初始值,其默认值为0
- 数据2 = 15 //给数据1赋初始值,其默认值为0
- 总数 = 数据1 + 数据2 //将数据1和数据2的值相加之后赋值给总数
- 辅助.消息框(转换.整型转字符型(总数)) //由于总数是整型的,而消息框的参数需要字符型,所以需要进行转换。
- 返回 真 //函数返回语句
- 功能结束
复制代码 启动编译后,错误提示:return语句的返回类型与函数声明的返回类型不一致。
当出现这个提示的时候,我们就直接看输出框给出的行数,找到这行后看接着看这个函数定义(也就是函数声明)的数据类型是什么,从这里我们可以看出,它是整型的数据,然后我们与刚提示行的返回的这个数据类型对比,它返回的是真,真假数据是属于逻辑型的范畴,所以我们知道返回的数据类型错了,那么我们应该如何改呢?
根据函数的整个运行来看,它是需要进行两个数相加后输出结果,应该是不需要返回任何数据,那么我们在这个返回上加可以随便填写数据了,返回的只要是整型的数据就可以,如:返回 0 、返回 总数 、 返回 118 这些都是可以的。
根据上面的问题大家就可能会想,那么它什么时候起到作用呢?接着我们再来看一个例子:
- 空间 教程//定义默认空间
- 功能 整型 两数相加()
- 整型 数据1,数据2,总数 //定义三个整型数据变量,前2个用于相加,后面这个用于接收他们的和
- 数据1 = 10 //给数据1赋初始值,其默认值为0
- 数据2 = 15 //给数据1赋初始值,其默认值为0
- 总数 = 数据1 + 数据2 //将数据1和数据2的值相加之后赋值给总数
- 返回 ? //这里应该返回什么数据呢?
- 功能结束
- 功能 逻辑型 开始_点击()
- ? 获取总数 //这里的数据类型是什么呢?
- 获取总数 = 教程.两数相加()
- 如果(获取总数>0)
- 辅助.消息框(?) //这里怎么填写呢?
- 否则
- 辅助.消息框("调用不成功!")
- 如果结束
- 返回 真 //函数返回语句
- 功能结束
- 空间结束 //空间结束语句
复制代码 从上面的例子,我给出了几个问号需要大家进行完善,在我还没给出答案之前,大家先自己去完善好了,再接着往下看。
根据上面例子剖析:
首先我们看两数相加这个函数,函数和上面那个例子差不多,只是去掉了弹出消息框这个命令,返回的数据填写什么这个时候我们还不清楚,但我们知道这个相加的数的结果是整型数据,这个很关键,那么接着我们看开始这个函数,大家都知道,开始函数是一个点击事件函数,也就是所谓的入口函数,程序将从这里开始往下执行,到了这里根据数据类型配对问题,我们很显然就知道刚相加的数据类型是整型的,那么我们肯定也用一个整型的数据去接收它,那这里就应该填写一个整型。
其次,我们看到了这里是一个函数的调用,它调用了两数相加的函数,并用刚定义的这个整型变量接受它,那么我们就很快的知道,它是想通过调用相加函数返回的值给刚定义这个变量,那刚才的两数相加函数的返回值肯定就是总数。
最后,我们进行对这个返回的数据进行判断,用到了如果(if)语句,判断这个得到的数据是否大于0,下面也是一个问号,它应该是弹出就是两个数据和的消息框。
填写完善之后:
- 空间 教程//定义默认空间
- 功能 整型 两数相加()
- 整型 数据1,数据2,总数 //定义三个整型数据变量,前2个用于相加,后面这个用于接收他们的和
- 数据1 = 10 //给数据1赋初始值,其默认值为0
- 数据2 = 15 //给数据1赋初始值,其默认值为0
- 总数 = 数据1 + 数据2 //将数据1和数据2的值相加之后赋值给总数
- 返回 总数 //这里应该返回什么数据呢?
- 功能结束
- 功能 逻辑型 开始_点击()
- 整型 获取总数
- 获取总数 = 教程.两数相加()
- 如果(获取总数>0)
- 辅助.消息框(转换.整型转字符型(获取总数)) //由于总数是整型的,而消息框的参数需要字符型,所以需要进行转换。
- 否则
- 辅助.消息框("调用不成功!")
- 如果结束
- 返回 真 //函数返回语句
- 功能结束
- 空间结束 //空间结束语句
复制代码 总结:数据类型在传递时需要保持一致。
五、事件函数问题:
在TC软件中我们可以设计自己程序的界面内容,如:开始按钮、停止按钮、下拉框、启动热键等等,只要是工具箱有的东西都可以在界面上添加进来使用。这里就很多人有点困惑了,他们是如何和代码相关的呢?是什么使得他们能够进行相连?为什么我写的代码只能在开始按钮有效果,我自己添加的按钮却无法执行里面的命令?为什么我的初始化函数没有效果? 带着上面这些问题我们接着往下看:
首先,我们新建一个项目,项目名称名字随意,然后将上面的开始按钮和退出按钮删除,将代码里面的开始函数和退出函数也删除了,只留下空间名和空间结束语,下面我们来到界面设计上进行对界面设计,在右侧上将工具箱激活,找到按钮,点击一下按钮,然后鼠标移动到设计的界面处再点击一次,这样一个按钮就添加进入了这个界面中,这个时候我们启动调试,生产的EXE界面中我们可以看到界面上多了一个按钮。
其次,我们关闭EXE回到设计界面上,选中这个按钮,点击右键,弹出属性,再点击属性,之后看右侧的属性栏,我们可以看到这里呈现出了这个按钮的名称、文本、有效、坐标等等相关参数,这个就是按钮的属性,假如我们想给这个按钮改名,那么你只要在文本重新输入你需要的内容,然后按回车或者鼠标焦点离开这个输入框后你就能发现界面上的名称改变了,其它的属性都可以在这里改。
最后,我们的目的是建立一个能够响应的事件函数,那么我们先将这个按钮的名称改为开始,然后在属性框的最下面这里有一个事件,点击空白下拉框会弹出一个添加,然后点击添加,这个时候就直接来到了代码区域,这个时候我们只要在这个函数内写命令,编译生成的EXE后点击开始按钮就可以直接这个我们命名的开始函数的内容了。这样界面的按钮就和代码搭上了关系。
注意点:很多时候我们都可能会用到初始化和销毁函数,那么我们是不是直接在代码里面写上初始化和销毁就起作用呢?其实这样并未达到效果,他们也和界面的按钮一样,会产生一个事件,那么我们如何添加这些事件呢?
方法:在设计界面上(也就是没有任何工具的地方)点击空白处,然后右键弹出的属性,点击之后在右侧我们就可以看到这里有初始化等事件,只要从这里进行添加之后,再在他们里面写上我们需要的命令即可。
总结:只要涉及与界面工具相关的函数,需要在界面上添加这些事件,并且这些事件函数只能在主空间出现,但可以在他们的函数中调用跨空间的函数或者主空间其它普通函数。
六、插件使用问题:
大部分的人在刚接触插件的时候都觉得太难了,其实插件和TC命令一样,只是我们不在用TC给出的命令,而是用插件给出的命令。而插件的命令需要在主空间加入一个头文件,这个头文件用于包括外部的插件接口,并给这个接口定义一个名称,然后根据这个名称去调用插件的命令。那么我们在使用插件的时候需要以下步骤,掌握了以下步骤,那么你就可以轻松的使用插件:
以后遇到了问题的地方,再为大家进行更新!!! 暂时更新完毕。
|