当前位置: 首页 > news >正文

C算术运算符 printf输出格式 字符指针打印输出 使用scanf函数进行输入

一  算术运算符

+ 加, 一元取正  
- 减, 一元取负  
* 乘  
/ 除
% 求余
-- 自减1  
++ 自加1  


逻辑运算符

&& 逻辑与
|| 逻辑或
! 逻辑非


关系运算符

> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于  


位运算符号

& 按位与
| 按位或
^ 按位异或
~ 按位取反
>> 右移
<< 左移

二 /****从小到大排列*****已仿真***************/

#include <stdio.h>
#define N 10
void main()
{    TMOD|=0x20;
                TH1=0xF3;
                TR1=0x1;
                TI=1;
    int  i,j,min,temp;
    int a[N]={5,4,3,2,1,9,8,7,6,0};
    printf("\nThe array is:\n");                   /* 输出数组元素 */
    for (i=0;i<N;i++)
        printf("%5d",a[i]);
    for (i=0;i<N-1;i++)                        /* 排序操作 */
    {
        min = i;
        for (j=i+1; j<N; j++)
            if  (a[min]>a[j])  min =j;         
        temp=a[min]; a[min]=a[i]; a[i]=temp;     /* 数据交换 */
    }                                     
    printf("\nThe sorted numbers: \n");           /* 输出排序结果 */
    for (i=0;i<N;i++)
        printf("%5d",a[i]);
    printf("\n");
}
/*******从大到小排列****已仿真**************/
         #include "REG51.H"
         #include "stdio.H"
         int i,j,p,q,s,
         a[10]={12,22,52,32,25,51,23,14,82,36};
         void main()
          {
           TMOD=0X20;
           TI=1;
           printf("\n input 10 numbers:\n");
           for(i=0;i<10;i++)
            {
             p=i;q=a[i];
             for(j=i+1;j<10;j++)
             if(q<a[j]) { p=j;q=a[j]; }
             if(i!=p)
             {
              s=a[i];
              a[i]=a[p];
              a[p]=s;
             }
             printf("%3d",a[i]);
           }
        }

三  printf输出格式

d  i  以带符号的十进制形式输出整数(正数不输出符号)
   o     以八进制无符号形式输出整数(不输出前导符o)
   x,X   以十六进制无符号形式输出整数(不输出前导符x)
         用x则输出十六进制数的a~f时以小写形式输出。用X时则以大写形式输出
   u     以无符号十进制形式输出整数
   c     以字符形式输出 只输出一个字符
   s     输出字符串
   f     以小数形式输出单.双精度浮点数,隐含六位小数
   c,E   以指数形式输出实数,用e时指数以“e”表示(如1.2e+02),
         用E时指数以“E”表示(如1.2E+02)
   g,G   选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0 。用G时
         若以指数形式输出,则指数以大写表示

四  字符指针打印输出

         #include<reg51.h>
          #include"stdio.h"
          void     main(void)
         {
          int k;
         char  *pweek[4]={"monday","tuesday","wednesday","thursday",
                                    "friday","satuaday","sunday"}
          for(k=0;k<=7;k++)
           printf("pweek[%d]=%s\n",kpweek[k]);
         }

五  使用scanf函数进行输入

#include<stdio.h>
void main()
{
int a,b,c;
printf("输入 a,b,c\n");
  scanf("%d,%d,%d",&a,&b,&c);
  printf("a=%d b=%d c=%d\n",a,b,c);
  fflush(stdin); }
  在Dev-C++上运行程序为:
  #include<stdio.h>
  #include<stdlib.h>
void main()
   {
  int a,b,c;
  printf("输入 a,b,c\n");
  scanf("%d,%d,%d",&a,&b,&c);
  printf("a=%d ,b=%d ,c=%d",a,b,c);
    fflush(stdin);
    system("pause");
      }
   注意上面的scanf("%d,%d,%d",&a,&b,&c);中%d,%d,%d之间有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不
   用逗号,而用空格,tab键或回车键将各个数据隔开

   格式字符说明
%a,%A 读入一个浮点值(仅C99有效)
    %c 读入一个字符
    %d 读入十进制整数
    %i 读入十进制,八进制,十六进制整数
    %o 读入八进制整数
    %x,%X 读入十六进制整数
    %s 读入一个字符串,遇空格、制表符或换行符结束。
    %f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
    %p 读入一个指针 %u 读入一个无符号十进制整数
    %n 至此已读入值的等价字符数
    %[] 扫描字符集合
    %% 读%符号
   附加格式说明字符表修饰符说明

   L/l 长度修饰符 输入"长"数据
   h 长度修饰符 输入"短"数据
   W 整型常数 指定输入数据所占宽度
   * 表示本输入项在读入后不赋值给相应的变量

scanf的返回值

scanf的返回值由后面的参数决定 返回值表示成功读入的数据的个数
   如: scanf("%d%d", &a, &b);
     如果a和b都被成功读入,那么scanf的返回值就是2
     如果只有a被成功读入,返回值为1
     如果a和b都未被成功读入,返回值为0
     如果遇到错误或遇到end of file,返回值为EOF。 且返回值为int型.

使用scanf函数时应该注意的问题

1、scanf()中的变量必须使用地址。
    2、scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。
   3、在用"%c"输入时,空格和“转义字符”均作为有效字符。
问题一
scanf()函数不能正确接受有空格的字符串?如:
   I love you!
  #include <stdio.h>
  int main()
   {
    char str[80];
    scanf("%s",str);
  printf("%s",str);
    return 0;
    }
  输入:I love you!
   输出:scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,
   scanf函数仅在每一个数据域均有数据,并按回车后结束)。
  ① 遇空格、“回车”、“跳格”键。
    ② 遇宽度结束。
    ③ 遇非法输入。
   所以,上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,
   并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问题,网上我所见的说法都是如此,
   但是,我经过调试发现,其实这时缓冲区字符串首尾指针已经相等了,也就是说缓冲区清空了,scanf()函数应该只
   是扫描stdin流,这个残存信息是在stdin中)。我们改动一下上面的程序来验证一下:
     #include <stdio.h>
   #include<windows.h>
     int main()
   {
      char str[80];
    char str1[80];
      char str2[80];
      scanf("%s",str);/*此处输入:I love you! */
    printf("%s",str);
    Sleep(5000);/*这里等待5秒,告诉你程序运行到什么地方*/ /*不是sleep(5) 1,函数名是Sleep不是sleep。
2,C/C++中,unsigned Sleep(unsigned)应该是毫秒ms. scanf("%s",str1);/*这两句无需你再输入,是对stdin流再扫描
  */ scanf("%s",str2);/*这两句无需你再输入,是对stdin流再扫描 */ printf("\n%s",str1);
  printf("\n%s",str2); return 0; } 输入:I love you!
   输出: I love you! 好了,原因知道了,所以结论是:残留的信息 love you是存在于stdin流中,
而不是在键盘缓冲区中。那么scanf()函数能不能完成这个任务?回答是:能!别忘了scanf()函数还有一个 %[]
格式控制符(如果对%[]不了解的请查看本文的上篇),请看下面的程序:
  #include "stdio.h"
  int main()
    {
  char string[50];/*scanf("%s",string);不能接收空格符*/
  scanf("%[^\n]",string);
      printf("%s\n",string); return 0; }
问题二
键盘缓冲区残余信息问题
#include <stdio.h>
  int main()
    {
     int a; char c; do
    {
       scanf("%d",&a);
     scanf("%c",&c);
       printf("a=%d c=%c\n",a,c);/*printf("c=%d\n",c);*/
      }
       while(c!='N'); }
     scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d\n",c);将C用int表示出来,
       启用printf("c=%d\n",c);这一句,看看scanf()函数赋给C到底是什么,结果是c=10 ,ASCII值为10是什么?
       换行即\n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),
      在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),
       而\n被scanf()函数“错误”地赋给了c.解决办法:可以在两个scanf()函数之后加个fflush(stdin);,
      还有加getch() , getchar()也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。
    但是加fflush(stdin);不管什么情况都可行。 ( 函数名: fflush 功 能: 清除一个流
   用 法: int fflush(FILE *stream); )
   #include <stdio.h>
     int main()
    {
     int a;
     char c;
       do
       {
      scanf("%d",&a);
      fflush(stdin);
      scanf("%c",&c);
        fflush(stdin);
        printf("a=%d c=%c\n",a,c);
       }
        while(c!='N');
         } 这里再给一个用“空格符”来处理缓冲区残余信息的示例:运行出错的程序:
     #include <stdio.h>
        int main()
          {
         int i;
         char j;
           for(i = 0;i < 10;i++)
         {
            scanf("%c",&j);/*这里%前没有空格*/
           }
         } 使用了空格控制符后:
          #include <stdio.h>
         int main()
              {
               int i;
              char j;
              for(i = 0;i < 10;i++)
                {
                   scanf(" %c",&j);/*注意这里%前有个空格*/
                  }
              } 可以运行看看两个程序有什么不同。
问题三
如何处理scanf()函数误输入造成程序死锁或出错?
            #include <stdio.h>
              int main()
              {
                 int a,b,c; /*计算a+b*/
                   scanf("%d,%d",&a,&b); c=a+b;
                 printf("%d+%d=%d",a,b,c);
               } 如上程序,如果正确输入a,b的值,那么没什么问题,但是,你不能保证使用者每一次都能正确输入,
             一旦输入了错误的类型,你的程序不是死锁,就是得到一个错误的结果,呵呵,这可能所有人都遇到过的问题吧?
             解决方法:
           scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,
           如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,
           键盘缓冲区就可能还个有残余信息问题。正确的例程:
            #include <stdio.h>
            int main()
          {
            int a,b,c; /*计算a+b*/
              while(scanf("%d,%d",&a,&b)!=2)fflush(stdin);
            c=a+b;
              printf("%d+%d=%d",a,b,c);
           }
补充
fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以) 以下是 C99 对 fflush 函数的定义:
  int fflush(FILE *stream); 如果stream指向输出流或者更新流(update stream),并且这个更新流
  最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream 指向的文件(如标准输出文件stdout)。
   否则,fflush函数的行为是不确定的。 C和C++的标准里从来没有定义过 fflush(stdin)。 fflush(NULL)
  清空所有输出流和上面提到的更新流。如果发生写错误,fflush 函数会给那些流打上错误标记,并且返回EOF,
  否则返回0。 由此可知,如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用
  fflush(stdin) 是不正确的,至少是移植性不好的。
   可采用如下方法: 方法一:
  /* 此函数可以和scanf函数一起使用,但使用%c输入时要注意,即此函数只能用于缓冲区非空的情况
   */
   #include <stdio.h>
     void flush()
     {
      char c;
     while ((c=getchar()) != '\n'&&c!=EOF) ;
    }
     int main()
     {
     int a,b,c; /*计算a+b*/
     while(scanf("%d,%d",&a,&b)!=2) flush();
  c=a+b;
     printf("%d+%d=%d",a,b,c);
     }
   方法二:
   使用getchar()代替fflush(stdin)[1]
    程序示例:
  #include <stdio.h>
  int main(int argc, char* argv[])
   {
    int i, c;
   for ( ; ; )
      {
     fputs("Please input an integer: ", stdout);
    scanf("%d", &i);
      if
        (
       feof(stdin) || ferror(stdin) )
     { /* 如果用户输入文件结束标志(或文件已被读完), */
   /* 或者发生读写错误,则退出循环 */
   /* do something */ break; } /*
    没有发生错误,清空输入流。 */ /*
  通过 while 循环把输入流中的余留数据“吃”掉 */
   while ( (c = getchar()) != '\n' && c != EOF ) ;
   /*可直接将这句代码当成fflush(stdin)的替代,直接运行可清除输入缓存流*/
  /* 使用 scanf("%*[^\n]"); 也可以清空输入流, */ /* 不过会残留 \n
   字符。 */ printf("%d\n", i); } return 0; }
编辑本段发展
使用scanf函数进行输入,必须指定输入的数据的类型和格式,不仅繁琐复杂,
  而且很容易出错.C++保留scanf只是为了和C兼容,以便过去用C语言写的程序可以
  在C++的环境下运行。C++的编程人员都愿意使用cin进行输入,很少使用scanf。

六 while do while 语句

8、FLASH脚本-while与 do while循环、循环语句的嵌套、组件  二十二、while与 do while循环
在编程的许多问题中都要用到循环结构,比如要对 10 个数字的排序,两个数字之间的比较,如
果采用选择结构,进行的条件分支非常多,所以写的代码也相当长,利用循环结构可快速解决
这个问题,大大提高程序的效率.
ActionScript 语言中可通过四种语句实现程序的循环,分别是 while、do...while、for 循环和
for in 循环语句.它们与 if 语句的最大区别在于只要条件成立,循环里面的程序语句就会不
断地重复执行.而 if语句中的程序代码只可能被执行一次.
while 的格式如下:
while(条件表达式) {
循环体;
}
说明:在运行语句块之前,首先测试条件表达式;如果该测试返回 true,则运行该语句块。
如果该条件为 false,则跳过该语句块,并执行 while 动作语句块之后的第一条语句。其流
程图如图所示. 通常当计数器变量小于某指定值时, 使用循环执行动作。 在每个循环的结尾递增计数器的值,
直到达到指定值为止。此时,件条表达式的返回值不再为 true,且循环结束。
求 1 + 2+ 3+…+100 的和
新建一个 FLASH 文档,在第一帧打开动作面板,输入下列代码:
var i = 1;
var sum = 0;
while (i<=100) {
sum += i;
i++;
}
trace(sum)
代码执行过程:
在上面的循环程序中,变量 i 的初始值是 1,表达式 i<=100 为真,变量 sum 加上 1,然
后 i+1 等于 2。再进行 i<=100 的判断,条件真,sum 再加上 2,i 又加上 2 等于 3,这样
循环执行,i 一直自加到 101,此时条件 i<=100 为假,结束循环。这样程序共进行了 100
次判断,也就是进行了 100 次循环,100 次执行表达式 sum+=i,这样就算出了 1+2+3+…
+100 和。
注意:在循环结构中,应该有使循环趋于结束的语句,在本例的代码中,用变量 i 来控制,
i 不断递加到 101,使条件为假,结束循环。
在前面我们知道 enterFrame 事件也是循环执行的,但是循环结构的执行要快行多,我们通
过下面的小程控来测试 while语句的执行速度:
var t = getTimer()/1000;//开始时间以秒为单位
var i = 0;
while (i<1000) {
i++
}//进行 100 次循环
trace(getTimer()/1000-t+"秒");
//结束时间减去开始时间,即循环所需时间.
用 while语句优化代码
大家还记得在第十四课中我们用加法赋值作了一个鼠标跟随效果, 当时每个字我们都要分别
设置它的_x 和_y。如果有 10个字就要写 20 行语句,如果 100 个字呢,那不是就很麻烦
吗?我们用 while就可以把代码优化了。
打开第十四课鼠标跟随特效源文件,把第 1 帧上的代码删除,选中第 1 个字的影片
剪辑元件,打开动作面板,输入代码:
onClipEvent (enter Frame) {
var i = 1;
while (i<=6) {
_root.mc1._x += (_root._xmouse-_x)/5;
_root.mc1._y += (_root._ymouse-_y)/5;
_root["mc"+i]._x += (_root["mc"+(i-1)]._x-_root["mc"+i]._x)/5+8;
_root["mc"+i]._y += (_root["mc"+(i-1)]._y-_root["mc"+i]._y)/5;
i++;
}
}
说明:
(1)如果字的个数增加了,只需改条件即可,例如是 10 个字,那么只需把条件 i<=6 改为
i<=10 就可以了。
(2)由于我们用了 enter Frame事件,所以第 2 帧就可以不要了。
用 while循环实现批量复制影片剪辑
打开源文件,场景第一帧加上代码:
var i = 1;
var num = 5;
while (i<=num) {
attachMovie("qiu", "qiu"+i, i);
_root["qiu"+i]._x = Stage.width/6*i;
_root["qiu"+i]._y = Stage.height/2
_root["qiu"+i+".txt"] = "qiu"+i;
i++;
}
这段代码作用是复制5 个影片剪辑实例,实例名分别为 qiu1、qiu2、qiu3、qiu4、qiu5,并
实现横向等距离排列。要实现同样的交果,代码的写法有很多,如:
var i = 0
var num = 5;
while (i++<num) {
attachMovie("qiu", "qiu"+i, i);
_root["qiu"+i]._x = Stage.width/6*i;
_root["qiu"+i]._y = Stage.height/2;
_root["qiu"+i+".txt"] = "qiu"+i;
}
或者这样写:
var i = 1
var num = 5;
while (i<=num) {
attachMovie("qiu", "qiu"+i++, i);
_root["qiu"+(i-1)]._x = Stage.width/6*(i-1);
_root["qiu"+(i-1)]._y = Stage.height/2;
_root["qiu"+(i-1)+".txt"] = "qiu"+(i-1);
}
dowhile语句:
do while 语句的格式
do {
循环体;
} while(条件表达式)
说明:和 while 循环语句相反,do while 循环语句是一种先斩后奏的循环语句。不管怎样
do{“和”}之间的程序至少要执行一次,然后再判断条件是否要继续循环。如果 while()里
的条件成立,它继续执行 do 里面的程序语句,直到条件不成立为止。其流程图如图用 do while 语句求和
同样的累加问题:1+2+3+…+100,用 do while语句程序为:
var i = 1;
var sum = 0;
do {
sum = sum+i;
i++;
} while (i<=100);
trace(sum);
程序中的 i 不一定只能加 1,可能加上任意数,比如求 100 以内的偶数之和,用这程这样
表示:
var i = 1;
var sum = 0;
do {
sum += i;
} while ((i += 2)<=100);
trace(sum);
区别 whi le与 dowhile 语句
(1) 选中第 1 帧,打开动作面板,输入下列代码;
var i=1
var j=5
(2) 在场景中创建两个按钮实例,分别测试两种语句的结果,两个按钮上的语句分别为;
on (press) {
while (i<j) {
i++;
}
trace(i);
}
on (press) {do {
i++
} while (i<j);
trace(i)
}
(3) 测试影片,不断地单击按钮
从输出面板可以看出,当程序第一次执行时,就是第一次单击按钮时,。结果都是一样,都
是数字 5。 但多单击一次时, while 语句结果还是 5, 而 do while 语句的测试结果不断加 1,
原因是 do while 语句先执行程序, 再进行条件判断, 所以从第二次单击按钮开始, 变量 i 就
加 1。
小结:
while 与 do_while 结构都可以按照一定的条件循环执行循环体,wihle 结构先判定循环条件,
当条件符合时就执行循环体,按顺序执行完循环体中的语句后,在返回 wihle 语句开始处,重新
判定条件,并以此规则进行循环操作,直到循环条件为 false时终止循环,转而执行 wihle 结构
下面的命令,与 wihle 结构不同的是 do_while 循环结构先执行循环体中的语句,然后判定循
环条件.这就是说 do_while循环结构无论条件是否符合,循环至少执行一次.

       二十三、循环语句的嵌套

一个循环体内包含另一个循环体结构,称为循环的嵌套.在这一讲中我们介绍 for 语句的嵌套、for 与while语句的嵌套。

二个for嵌套(乘法九九表)
(1)在舞台上创建一个动态文本,变量名为: “sir”
(2)插入“图层 2”在此第 1 帧输入代码:
var str:String = "";
for (var i = 1; i<=9; i++) {
for (var j = 1; j<=i; j++) {
var k = i*j;
str = str+i+"×"+j+"="+k+(k<10 ? " " : " ")+(j == i ? "\n" : "");
}
}

三个f or嵌套(求水仙花数)
提示:所谓的“水仙花数” ,是指一个三位数,其各位数字的立方和等于该数本身,例如:153 是一个,“水仙花数” ,因为 153 等于 1的立方加上 5 的立方加上 3 的立方。程序如下:
var str:String = "";
var n = 0;
for (var i = 1; i<=9; i++) {
for (var j = 0; j<=9; j++) {
for (var k = 0; k<=9; k++) {
m = i*100+j*10+k;
if(m == i*i*i+j*j*j+k*k*k) {
n++;
str = str+m+(n == 0 ? " " : " ");
}
}
}
}

for语句可以和while语句嵌套使用。(因数分解)
下面我们做一个因数分解的程序。这个实例子 for 语句可以和 while语句嵌套。
(1) 在舞台上创建一个输入文本, 变量名为: “my_txt1” ,再创建一个动态文本, 变量名为: “my_txt2” 。
(2) 创建两个按钮实例,分别用来做分解计算和清空
(3) 添加代码:
“分解”按钮上的代码:
on (release) {
m = Number(my_txt1);
var str:String = m+"=";
var flag = 1;
for (i=2; i<m; i++) {
   while (m%i == 0) {
    if (flag == 1) {
     str = str+""+i;
     flag = 0;
    } else {
     str = str+"×"+i;
    }
    m = m/i;
   }
}
if (m != 1) {
   str = str+"×"+m;
}
my_txt2 = str;
}

清空按钮上的代码:
on (release) {
my_txt1 = "";
my_txt2 = "";
}

嵌套复制
(1)打开素材源文件。
(2)选中复制按钮,打开动作脚本面板,添加代码:
on (release) {
for (i=1; i<=4; i++) {
for (j=1; j<=4; j++) {
duplicateMovieClip("mc", "mc"+i+j, i*4+j);
this["mc"+i+j]._x = (i-1)*100;
this["mc"+i+j]._y = (j-1)*100;
this["mc"+i+j+".txt"] = "mc"+i+j;
}
}
}
(3)选中删除按钮,打开动作在板,添加代码:
on (release) {
for (i=1; i<=4; i++) {
for (j=1; j<=4; j++) {
removeMovieClip("mc"+i+j);
}
}
}
说明:本课中的实例理论性较强,牵涉的数学知识较多

       二十四、组件

组件是拥有已定义了参数的复杂影片剪辑,这些参数在文档创作时设置。通过参数的设置和使用,我们可以修改组件的外观和行为。每个组件都有自己的AS方法,允许我们设置和修改其选项。
    FLASH提供几类组件,它包括数据组件、多媒体组件、UI组件。使用组件时,我们可以使用动作脚本方法添加组件,也可以按下Ctrl+F7组合键打开组件面板。

组件的添加和参数设置
使用组件面板来选择添加组件,按下Ctrl+F7组合键,打开组件面板,将需要的组件拖到场景中。打开属性面板,就可以在属性面板中的参数选项卡中为组件添加参数,并为组件命名和设置组件尺寸及位置。属性面板中的ComboBox组件参数选项卡如图所示

也可以按Alt+F7组合键打开组件检查器,如图所示,我们可以对组件进行设置。


建立ComboBox组件
下面通过使用组件面板来建立组件。
1、按下Ctrl+F7组合键,打开组件面板,选择UI组件类中的ComboBox组件,将它拖入场景中。
2、打开属性面板,在属性面板中的参数选项卡中为组件添加参数。选择labels项,单击labels右面的数据栏,弹出值对话框
3、在值对话框中输入数据项参数。
4、选择rowCount行数项,输入所需要的行数
测试效果


用程序指令控制组件

用程序指令处理组件时事件,有两种方法:一种使用on()函数控制组件,另一种使用Click组件侦听器控制组件。使用on()函数控制组件是FLASH传统的编程思想,容易理解和掌握。使用Click组件侦听器控制组件,是FLASH提倡使用的编程思想,这种方法更符合面向对象的编程特性,程序更安全,功能更强。

使用on()函数控制组件
1、建立组件对象。按下Ctrl+F7组合键,打开组件面板,选择UI组件类中的RadioButton组件,将它拖入场景中。
2、打开属性面板,在属性面板的参数选项卡中为组件添加参数。选择label数据项,在右面的数值栏中输入"选择"
3、对组件进行编程。选中组件,打开动作面板,输入帧指令:
on(click){
trace("选择正确");
}
测试影片,单击"选择"按钮,将在输出面板中输出"选择正确"字样


使用组件侦听器控制组件
将上例中控制组件的on()函数去掉,改为使用组件侦听器控制组件
1、选中场景中的组件,打开属性面板,在属性面板左边,输入组件实例名为"hack"。
2、选择第一帧,输入帧指令:
zt=new Object();//建立侦听器对象
zt.click=function(){
trace("选择正确");
};//为侦听器对象上的click定义一个函数
hack.addEventListener("click",zt);//将组件名为hack的组件注册到侦听对象


组件应用
利用组件制作选择题
1、按下Ctrl+F7组合键,打开组件面板,选择UI组件类中的RadioButton组件,将它拖入场景中。并复制一个RadioButton组件。在场景中建立选择题画面
2、选择左边的RadioButten组件,打开属性面板,在属性面板的参数选项卡中为组件修改参数。

在宽度栏输入60,将该组件的宽度改为60像素宽。

下面我们来解释下该组件的参数作用:
data数据参数:在数据参数栏输入数据15,这个数据将会作为选择题的判断依据。
label标签参数:将标签参数改为"对"。
groupName组名参数:它是很重要的参数,拥有相同组名的单选按钮,同时只能有一个被选中,这样在同一组内就不会出现多个选择。在这个参数栏输入a1。
选择右边的RadioButten组件,在宽度栏同样输入60,将该组件的宽度改成了40像素宽。右边的label标签采纳数栏改成"错",数据栏data中输入数据"13",这个数据将会作为选择题的判断依据,在组名参数栏输入a1

3、选择右下方的文本框,打开属性面板,在左边的文本类型栏中选择动态文本,在文本类型栏下面输入文本框名为"txt"

4、插入新的图层,作为AS层,选中第一帧,输入帧指令:
Listener=new Object();//建立侦听对象
Listener.click=function(hk){//建立侦听对象的click事件函数
if(15==hk.target.selection.data){//判断单选按钮组件中数据栏中的数值是不是等于15
txt.text="选择正确";//如果等于15,将"选择正确"赋予txt文本变量
}else{
txt.text="选择错误";//如果不等于15,将"选择错误"赋予txt文本变量
}
};
a1.addEventListener("click",Listener);//将组名为"a1"的单选按钮注册到侦听对象测试影片

相关文章:

  • MCGS昆仑通太屏笔记
  • 【mongodb】数据库操作
  • OSI七层网络模型详解
  • 【MySQL】MySQL建立索引不知道注意什么?
  • OpenStack Yoga版安装笔记(23)Swift安装
  • 六边形棋盘格(Hexagonal Grids)的坐标
  • OPC_KEPServerEX 6 安装与授权
  • 【KWDB 创作者计划】_上位机知识篇---Docker容器
  • 提升电脑性能!Windows超级管理器,免费使用,功能全面!
  • 故障诊断 | CNN-BiGRU-Attention故障诊断
  • 真实波幅策略思路
  • uniapp-x 二维码生成
  • 【愚公系列】《Python网络爬虫从入门到精通》054-Scrapy 文件下载
  • 多道程序和多任务操作系统区别
  • spring三级缓存如何解决循环依赖问题
  • Java Web 之 Tomcat 100问
  • C语言 数组(下)
  • Windows下使用C++的方式获取Windows的硬件信息
  • hackmyvm-airbind
  • OpenBMC开发之obmc-ikvm与libvncserver的连理关系
  • 独家专访|苏童:《好天气》是一部献给中国郊区的作品
  • 拒绝“假期刺客”,澎湃启动“五一”消费维权线索征集
  • 加力扩围支持消费品以旧换新,江苏要送出1800万元彩票
  • 浙江、安徽公布一季度外贸数据,出口增速均达到两位数
  • 是什么,坚定了外资企业“在浦东为世界”的决心?
  • 财政部公布2025年一般国债、超长期特别国债发行有关安排