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"的单选按钮注册到侦听对象测试影片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32中Hz和时间的转换

目录 一、常见的频率单位及其转换 二、计算公式 三、STM32中定时器的应用 四、例子 一、常见的频率单位及其转换 赫兹&#xff08;Hz&#xff09;是频率的国际单位&#xff0c;表示每秒钟周期性事件发生的次数。 1 kHz&#xff08;千赫兹&#xff09; 1,000 Hz1 MHz&#…

《分布式软总线:不同频段Wi-Fi环境下设备发现兼容性难题》

分布式软总线技术作为实现设备互联互通的关键&#xff0c;正逐渐成为构建万物互联世界的基石。然而&#xff0c;当分布式软总线面临不同频段Wi-Fi环境时&#xff0c;设备发现的兼容性问题成为了阻碍其广泛应用的一大挑战。这一问题不仅影响着用户体验&#xff0c;也制约着分布式…

MCP(Model Context Protocol 模型上下文协议)科普

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是由人工智能公司 Anthropic 于 2024年11月 推出的开放标准协议&#xff0c;旨在为大型语言模型&#xff08;LLM&#xff09;与外部数据源、工具及服务提供标准化连接&#xff0c;从而提升AI在实际…

【mongodb】数据库操作

目录 1. 查看所有数据库2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则创建&#xff09;3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则…

ICPR-2025 | 让机器人在未知环境中 “听懂” 指令精准导航!VLTNet:基于视觉语言推理的零样本目标导航

作者&#xff1a;Congcong Wen, Yisiyuan Huang, Hao Huang ,Yanjia Huang, Shuaihang Yuan, YuHao, HuiLin and Yi Fang 单位&#xff1a;纽约大学阿布扎比分校具身人工智能与机器人实验室&#xff0c;纽约大学阿布扎比分校人工智能与机器人中心&#xff0c;纽约大学坦登工程…

基于DeepSeek的考研暑假日志分析

注&#xff1a;我去年考研时写了日志&#xff0c;大致记录了我每天的主要活动。由于过于琐碎&#xff0c;一直没有翻看。突发奇想&#xff0c;现在利用deepseek总结其中规律。 从你的日志中可以总结出以下规律和活动兴衰起落&#xff1a; ​​一、学习活动规律与演变​​ ​​…

【刷题Day20】TCP和UDP

TCP 和 UDP 有什么区别&#xff1f; TCP提供了可靠、面向连接的传输&#xff0c;适用于需要数据完整性和顺序的场景。 UDP提供了更轻量、面向报文的传输&#xff0c;适用于实时性要求高的场景。 特性TCPUDP连接方式面向连接无连接可靠性提供可靠性&#xff0c;保证数据按顺序…

REST 架构详解:从概念到应用的全面剖析

REST&#xff08;Representational State Transfer&#xff09;即表述性状态转移&#xff0c;是一种用于构建网络应用程序的架构风格和设计理念&#xff0c;由计算机科学家罗伊・菲尔丁&#xff08;Roy Fielding&#xff09;在 2000 年提出。以下是关于它的详细介绍&#xff1a…

蓝桥杯之递归二

1.数的划分 题目描述 将整数 nn 分成 kk 份&#xff0c;且每份不能为空&#xff0c;任意两份不能相同(不考虑顺序)。 例如&#xff1a;n7&#xff0c;k3n7&#xff0c;k3&#xff0c;下面三种分法被认为是相同的。 1&#xff0c;1&#xff0c;5;1&#xff0c;5&#xff0c;…

LeetCode(Hot.2)—— 49.字符异位词分组题解

Problem: 49. 字母异位词分组 字母异位词的定义是&#xff1a;两个单词的字母组成一样&#xff0c;但顺序可以不同&#xff0c;比如 eat、tea 和 ate 就是一个组的。 思路 将每个字符串按字母排序&#xff0c;把排序后的字符串作为 key&#xff0c;相同 key 的放在一个 list 中…

为什么信号完整性对于高速连接器设计至关重要?

外部连接器通过在各种电子元件和系统之间可靠地传输数据而不损失保真度来保持信号完整性。在本文中&#xff0c;我们将讨论信号完整性的重要性&#xff0c;回顾高速部署挑战&#xff0c;并重点介绍各种连接器设计策略&#xff0c;以防止失真和降级。 了解连接器信号完整性挑战…

得物官网sign签名逆向分析

打开得物官网&#xff0c;点击鞋类&#xff0c;可以看到请求 直接搜sign function p(e) {return f()("".concat(e ? s()(e).sort().reduce(function(t, n) {return "".concat(t).concat(n).concat(e[n])}, "") : "", "048a9…

Ubuntu 安装WPS Office

文章目录 Ubuntu 安装WPS Office下载安装文件安装WPS问题1.下载缺失字体文件2.安装缺失字体 Ubuntu 安装WPS Office 下载安装文件 需要到 WPS官网 下载最新软件&#xff0c;比如wps-office_12.1.0.17900_amd64.deb 安装WPS 执行命令进行安装 sudo dpkg -i wps-office_12.1…

javaSE.判空包装类

判空包装类Optional&#xff0c;这个类可以很有效的处理空指针问题 空指针异常&#x1f447; 特判null&#x1f447; Optional类可以更加优雅地处理这种问题&#x1f447;&#x1f447; ofNullable&#x1f447; isPresent isEmpty &#x1f447; &#x1f447; 包装之后&…

使用 vcpkg 构建支持 HTTPS 的 libcurl 并解决常见链接错误

适用环境&#xff1a;Windows 10/11 Visual Studio 2022 CMake ≥ 3.20 目标读者&#xff1a;希望在 C 项目中轻松调用 HTTPS&#xff08;GET/POST/PUT/DELETE&#xff09;&#xff0c;又被 LNK20xx 链接错误困扰的开发者 目录 为什么选 vcpkg 与 libcurl用 vcpkg 安装带 SS…

ISO26262-浅谈用例导出方法和测试方法

目录 1 摘要2 测试方法3 测试用例导出方法4 测试方法与用例导出方法的差异和联系5 结论 1 摘要 ISO26262定义了测试方法和用例导出方法&#xff0c;共同保证产品的开发质量。但在刚开始学习ISO26262的时候&#xff0c;又不是非常清晰地理解它俩的区别和联系。本文主要对它俩的…

RoBoflow数据集的介绍

https://public.roboflow.com/object-detection&#xff08;该数据集的网址&#xff09; 可以看到一些基本情况 如果我们想要下载&#xff0c;直接点击 点击图像可以看到一些基本情况 可以点击红色箭头所指&#xff0c;右边是可供选择的一些yolo模型的格式 如果你想下载…

基于CFSSL构建高可用ETCD集群全指南(含TLS证书管理)

基于CFSSL构建高可用ETCD集群全指南&#xff08;含TLS证书管理&#xff09; 摘要&#xff1a;本文深入讲解使用CFSSL工具签发TLS证书&#xff0c;并部署生产级高可用ETCD集群的完整流程。涵盖证书全生命周期管理、集群配置优化及安全加固方案&#xff0c;适用于Kubernetes、分…

【设计模式】适配器模式:让不兼容的接口和谐共处

引言 在软件开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;两个已经存在的接口无法直接协同工作&#xff0c;但我们又希望它们能够无缝对接。这时&#xff0c;适配器模式就派上用场了。适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&…

doris/clickhouse常用sql

一、doris常用SQL 1、doris统计数据库的总大小&#xff08;单位&#xff1a;MB&#xff09; SELECT table_schema AS database_name,ROUND(SUM(data_length) / 1024 / 1024, 2) AS database_size_MB FROM information_schema.tables WHERE table_schema NOT IN (information…