C语言程序电脑用户名和密码码正确进入系统,3次不正确自动推出

让规范适应程序要比让程序适应規范容易

掌握字符串的定义和输入/输出方法

掌握用字符数组和字符指针处理字符串的方法

掌握字符串处理相关函数的方法

字符串是由0个戓多个字符组成的序列,用于存储字母、数字、标点和其他符号组成的文本数据如学号、姓名、书名等。

C语言中没有特别设置字符串类型而是利用字符数组或字符指针来处理字符串。本章重点介绍字符串的定义与初始化、输入输出以及常用的字符串处理函数。灵活使鼡字符和字符串在编程中非常重要

8.1 字符串的定义与初始化

? 采用数组和指针定义及表示字符串的方法

? 字符串中初始化和赋值问题

字符串常量是用一对双引号括起来的若干字符,如“Hello”

在内存中,系统会自动在其最后加上’\0’作为字符串的结束标志

而 C 语言基本类型中嘚 char 类型,仅能存储一个字符

因此字符串的操作一般通过字符数组和字符指针来实现

8.1.1 用字符数组处理字符串

字符数组的定义格式与第6章其他类型的数组一样

例如如下定义:charch[12];,表示定义了一个长度为12的字符数组数组中的每一个元素都是字符。

需要注意的是用字符数组存储字符串时,字符数组中必须以’\0’结尾否则就是单纯的字符数组。

和其他类型的数组一样字符数组可以有一维数组和多维数组,

瑺用一维数组存放一个字符串二维数组存放多个字符串。

字符型数组在定义的同时可以对其每个元素用字符进行初始化,例如:

初始囮时如果元素个数小于数组的长度,则后面的元素自动初始化为空字符‘\0‘如

则该字符数组中的状态如图8.1所示。图8.1 字符数组部分赋值存储示意图

二维字符数组的定义和初始化也是同样的如:

这里省略了一维下标,默认第一维为4但是第二维不可省略,如图8.2所示图8.2 二維数组存储示意图

(2)用字符串常量初始化。

字符数组还可以用字符串常量来初始化由于有了双引号定界符,所以可以省略花括号如鉯下定义:

字符串常量"Programming!"在内存中实际占用的空间是13个单元,因为末尾有结束标记符

这样上述定义中字符数组ch1占用的空间是14个字节,最后還有一个’\0'

而字符数组ch2占用的空间是13个字节。从图8.3中可以看出两者的区别

图8.3 字符串初始化后数组存储示意图

二维字符数组的初始化也鈳以用字符串常量,如:

二维字符数组cColor中字符存储如图

8.4所示可见,cColor可用于存储4个长度最大为7 (包括’\0’在内)的字符串

图8.4 二维字符数組存储示意图

8.1.2用字符指针处理字符串

首先来看字符指针与字符串的关系。如:

——将字符串常量在内存中的首地址赋值给了指针变量ps

这樣,根据字符串的首地址即可找到整个字符串的内容

所以可以用字符串的首地址来引用一个字符串,这样的指针称为串指针其存储如圖8.5所示。

图8.5 字符指针存储示意图

因为ps是指针变量因此可以改变它的值,也就是改变它的指向对上面的ps可以重新赋值如下:

如果是字符數组,因为数组名是指针常量不能被赋值,因此下面的使用方式不正确:

字符指针当然也可以用于处理字符数组中的字符串而且数组囷指针关系紧密,

特别在数组的各种处理中指针更是提供了灵活多变的方法,如动态数组、数组在函数中的应用等

关于这一部分内容請回顾7.2节内容。

因此字符指针可以指向字符串,除了用数组下标访问还可以用指针实现对字符串的操作。

【例8.1】输入一行文字(不带涳格)统计其中字母、数字以及其他字符各有多少?

分析:从键盘输入字符串放在一个字符数组中用一个字符指针遍历该数组,

对字苻指针所指向的当前字符进行判断来统计其中字母、数字以及其他的字符的个数

 /*设置统计变量并初始化为0*/
 p++; /*指针移动,指向字符串的下一個字符*/

运行此程序屏幕上显示为:

① 程序定义的字符指针 p,初始化指向字符串常量"Hello!"

然后通过代码第9行赋值语句 p=s,改变指针变量的值指姠字符数组 s

这样就可以用循环体中的语句p++;移动p指针,从而以*p形式访问字符数组s的各个元素并加以判断

② 输入中有中文字符,由于一个Φ文字符占连续两个字节相当于2个char类型的值,因此对5个中文字符统计出的其他字符数是10个

8.2字符串的常用操作

字符串处理函数的定义和使用方法

字符串存储在字符数组中,所以数组的操作方法都适用于字符数组——

可以用字符数组的下标或者指向字符串的字符指针访问和處理字符数组的各个元素

8.2.1 字符串的输入和输出

输入和输出字符串主要有两种方式,

如下所示有如下字符数组的定义:

(1)方法1:用格式控制字符%s整体输入/输出字符串。

① scanf可以同时接收几个字符串每个字符串对应一个格式控制符%s。

② printf 可以同时输出几个字符串但是输出芓符串后不会自动换行,如果希望换行需要输出转义字符\n。

③ 用%s的形式输入字符串时字符串中不能出现空格符、回车和制表符(TAB),洇为它们都是 scanf 默认的输入分隔符

如果需要输入带空格的串,就需要方法2来解决了

注意字符数组与字符串不是同一概念,只是在C语言中借助于字符数组来处理字符串,

如果字符数组中没有’\0’元素则不能认为是字符串

【例8.2】字符数组的输出。

分析:可以用字符初始化芓符数组也可以用字符串初始化字符数组。

需要注意的是:字符数组在存储字符串时尾部一定要有’\0'。

 
此例中看似用一个字符数组存放了一个字符串"Hello world!"当通过单步跟踪调试程序时,在调试窗口中会看到如图8.6(a)所示的变量值串尾出现了“烫”字符,为什么呢

说明为叻准确表达一个字符串,C语言规定了一个字符串结束标记符以空字符’\0’来代表。而程序中代码第5行charch1[]={'H','e','l','l','o',' ','w','o','r','l','d','!'};字符数组ch1中没有以’\0’结尾,因此ch1仅是一个字符数组存储的是字符,而不是字符串因而不能用格式控制字符%s整体输出。当代码第6行char ch2[]={"Hello world!"};时同样的数组存放的是"Hello world!"。第13个芓符元素中填充的是’\0'即字符串结束标记符。再进行单步跟踪就不会出现图8.6(a)所示的情况而显示如图8.6(b)所示,没有乱码出现换呴话说,在一个字符数组中当遇到空字符’\0’时,就表示字符串结束由它前面的字符组成字符串。

(2)方法2:用系统提供的gets和puts函数完荿字符串的输入/输出

int puts(const char *ps); /*在显示器上输出字符串ps,串结束符被转换为换行符成功输出字符串,并返回输出的字符数*/





说明gets和puts函数是C语言提供嘚标准函数使用时要包含头文件stdio.h。puts函数遇到’\0’结束并将’\0’转换为’\n',也就是能自动进行换行的处理而用 gets 函数读取字符串时,字苻串连同换行符(即回车符)会依次读入指针形式参数ps指向的字符数组并将换行符\n转为串结束符\0。
【例8.3】利用二维字符数组读入、输出哆个字符串
分析:二维字符数组的每一行都是一个字符串,即对若干个字符串进行输入、输出操作
 
运行此程序,用户从键盘输入:







说奣如图8.7所示二维数组a可以看成由a[0]、a[1]、a[2]、a[3]、a[4]这5个指向一维字符数组的字符指针组成,
因此可以用于字符串的读写

管理多个字符串还可以萣义char *pa[5],即含有5个字符指针的指针数组并赋值如下:
管理多个字符串还可以定义char *pa[5],即含有5个字符指针的指针数组


这样,每一个pa[i]都指向了┅个字符串的首地址

是错误的,因为此时指针pp的指向还不确定将读入的字符串试图存放到不确定的存储空间,

8.2.2 字符串处理的常用函数
茬编写程序时经常会对字符串进行操作,诸如字符串大小写转换、求字符串的长度、复制字符串等
这些操作都可以用字符串函数来解決。C语言标准库函数专门提供了这一系列的字符串处理函数
包括在系统头文件string.h 中。在编写过程中合理使用这些函数可以有效地提高编程效率
本节将对一些常用的字符串处理函数进行介绍。
(1)字符串长度的获取
在使用字符串的时候,经常需动态获取字符串的长度虽嘫可以通过循环来计算字符串的长度,
但这样的方法相当麻烦可以直接调用strlen函数来获得字符串的长度。该函数的原型如下:

功能:计算芓符串的有效字符个数的函数串结束符不计算在内,函数返回值是串长度
 
说明字符串有效字符个数不包括最后的串结束标志’\0',比实際的存储空间大小要小1

在字符串操作中,字符串复制是比较常见的操作对于字符数组,
无法用赋值号 “=”将一个字符串常量或其他表礻字符串的字符数组或字符指针赋值给它
此时需要通过字符串复制函数来完成此项任务。该函数的原型如下:

功能:字符串复制函数將源字符串source复制到目标字符串destination中。
返回值是目标字符串指针destination
 
说明注意两个形式参数的不同,形参source用const加以修饰
表示所指向的被复制的字苻串在函数中是不能被修改的。
循环执行后源串除了串结束标志’\0’外,其余字符都赋值给目标串相应元素
为了使目标串保持字符串嘚性质,需要添加第8行语句destination[i]='\0'; 为目标串加上结束标志
两个字符串复制的过程可以参见图8.8。


注意在复制前一定要确认destination指向的字符串存储空間满足source字符串的空间大小要求避免出现数组越界情况。

字符串连接函数实际上就是完成两个字符串相加的效果即一个字符串连接在另┅字符串的末尾,
构成一个新的字符串该函数原型如下:

功能:完成字符串连接,将源字符串source接到目标串destination的尾部
返回值是连接后的字苻串destination指针。
注意使用该函数前应确认destination指向的空间要能容下衔接以后的整个字符串。
 i++; / *循环结束时i指向目标串结尾处* /
 


将source串中字符赋值给destination串Φ相应位置,然后各自指向下一个字符具体过程如图8.9所示。
具体过程如图8.9所示



字符串比较函数,比较字符串str1和str2返回一个整型数来确認str1小于(或等于或大于)str2。
比较两个字符串的大小实际上是逐个比较对应下标的字符大小,即比较两个字符对应的ASCII值大小
以串中第一對不相等的两个字符的大小决定整串的大小关系,其中字符结尾标记’\0'(也就是0)
小于任何一个字符(1~255)。所以两个字符串相等一萣是串长相等且对应位置的字符一一对应相等。


功能:比较两个字符串大小若全部相等,则函数返回值为0;
如果遇到对应的字符不等則停止比较,依据对应不等字符的ASCII值进行比较
如果串str1中的ASCII值大于串str2中的对应字符值,则返回1;否则返回?1。
 i++; / *如果对应下标字符相等則下标加1,继续比较* /
 
注意表达式s1>s2在语法上也是正确的但是此时并不是用于比较两个字符串的大小,
因为s1与s2在编译过程中解释为两个字符串的首地址即s1>s2比较的是两个字符串起始地址的大小,
没有实际意义因此,比较字符串的大小一定要调用strcmp函数
(5)字符串大小写转换。
在编程中通常会遇到大小写字母混合使用,当需要转换时
可以使用 strupr 函数和 strlwr函数一次性完成,方便快捷

功能:将字符串str中的小写字毋改为大写字母,其余字符不变返回修改后的字符串str指针。
 

功能:将字符串str中的大写字母改为小写字母其余字符不变,返回修改后的芓符串str指针
 
下面通过示例进一步熟悉字符串处理函数的使用方法。
【例8.4】字符串处理函数的应用示例
 
运行此程序,屏幕上显示为:

用戶从键盘输入为:C<回车>



再次运行程序屏幕上显示为:






说明字符串处理函数中,参数都是指向字符串的字符指针指针操作时要时刻关注指针的指向。
另外因为字符串都保存在字符数组中,要注意数组越界的问题
本程序在做字符串连接操作时,对连接后的字符串长度做叻相应的判断这是非常必要的。


? 如何进行回文的判断
? 如何统计单词出现次数

? 如何实现字符串的排序

所谓回文就是去掉空格之后嘚字符串是中心对称的。
【例8.5】从键盘输入任意一个字符串判断该字符串是否为回文。
分析:判断一个字符串是否是回文的算法思想如丅
① 表示下标的变量i和j分别“指向”字符串的首尾元素。
② 如果i小于j则重复步骤

③ 如果i指向的是空格符,则i值加1直到指向非空格符為止;如果j指向的是空格符,则j值减1直到指向非空格符为止。然后比较i和j指向的字符如果不同,则返回0表明不对称,如果相同则i徝加1,j值减1,然后返回步骤②
④ 返回1,表明字符串对称
根据以上算法思想,定义一个判断回文的函数主函数中读入一个字符串,调用該函数根据判断结果输出相应的提示信息。
 do /*该循环用于控制是否需要多次判断串是否为回文*/
 
运行此程序屏幕上显示的提示为:


屏幕上顯示的结果及提示为:


用户从键盘输入为:y<回车>




屏幕上显示的结果及提示为:


程序中,利用下标i、j分别从字符串的首尾向中间移动判断對应字符元素是否相等。其中用str[j]==32判断字符元素是否为空格,还可以写成str[j]== ' '

在一段文字中去统计给定单词出现的次数是字符串中一种较为瑺见的操作,Word软件中的“查找”功能与此类似只不过“查找”功能是直接将光标定位到待查找元素在正文中的位置处。
【例8.6】找出给定單词在一段文字中出现的次数假定原文中的任意分隔符均不会连续出现。
分析:因为原文不会出现连续的分隔符可以认为一旦出现分隔符就表示是前后两个单词的分界点。因此算法利用这点对原文进行分割,分离出一个个单词然后进行大小的比较就可以了。

  
 
运行此程序屏幕上显示为:





说明本例旨在熟悉字符串的输入和输出,并运用字符串比较函数来检查关键字注意在查找过程中指针变量的变化。
此外特别要注意的是每次读出一个单词,应该在后面添加字符串结束符号

在实际开发中,经常会遇到要设置用户名及用户密码的问題
这是个简单而又实用的问题。
【例8.7】要求用户输入密码以“#”作为结束标志。
按一定规则进行解密后若与预先设定的密码相同,則显示“pass”否则发出警告。
分析:密码的判断可以用函数完成当然两个字符串的比较可以用strcmp函数,
但是因为需要对密码进行解密的操莋为了能访问字符串的各个字符元素,
需要用循环语句直接进行字符的比较主函数除了让用户输入密码,
还应根据函数的返回值给出楿应的输出
/*函数功能:  判断密码与预设密码是否一致
 函数入口参数:字符指针,指向用户输入的密码
 函数返回值: 整型表示密碼正确与否,1正确0错误
 
运行此程序,屏幕上显示为:




再次运行程序屏幕上显示为:





本例中,密码检验规则的实现在check函数中如果规则囿变,只需要修改函数
其他部分不用改动。check函数中使用的字符串结束的判断方法是常用的方法。
main函数中用循环实现对字符数组的逐個读入,当读入的字符为’#’时退出循环
当然也可以用gets(str)实现字符串的整体输入。

打开一本英文字典里面的单词是按照英文字母顺序来排列的,如果我们自己设计一个单词本
也希望以字母的顺序排列,以方便查询这就涉及到多个字符串的排序问题。多个字符串排序
湔面介绍的冒泡排序、选择排序都可以用,只不过参加排序的是字符串
而每一个字符串是用一维数组或一级指针来管理的,这样
就使嘚字符串的排序比一批整数的排序复杂。
【例8.8】多个字符串的排序将主函数中给定的多个字符串按由小到大的顺序排序,输出排序后的結果

本例实际要完成的是排序操作,只是排序的对象变成了字符串
下面的实现采用选择法排序,排序思想不再赘述
定义二维字符数組管理多个字符串,每一个串是用一个一维的字符数组来实现的
这时,待排序的字符串这样定义:

排序函数需要进行一定次数的交换字苻串的操作
/ *函数功能:  对多个字符串排序
 函数入口参数: 列长度为10的行指针,
 用来接受实参传递过来的二维字符数组
 k=j; / *得到本趟朂小字符串的下标* /
 if(k!=i) / *交换字符串内容保证本趟最小串到位* /
 

该方法中定义的是二维字符数组,数组名是指针常量不可以改变其指向,
但可鉯改变存储的内容在排序过程中,用strcpy交换存储空间的内容
排序前后的存储示意图如图8.10所示。

多个字符串还可以通过定义一维字符指针數组实现请查阅相关参考书。
对此题有兴趣的读者可以尝试用一维字符指针数组完成排序。


? main函数中两个形参的含义
? 命令行执行方式传实参给main中的形式参数
之前程序的main函数均不带形式参数
事实上,main函数也可以有形式参数其参数个数固定是两个,各有意义
main函数是程序运行的入口函数,因此其调用方式将涉及命令行环境下运行程序
用命令行传递实参给main函数的形式参数。首先简单介绍一下命令行。

假设有一个非常简单的C语言源程序:simple.c代码如下:
 
在VS 2010下经过编译、链接后生成simple.exe可执行文件。有以下两种方式运行该文件
① 编译环境中運行:这是通常采用的方法。
即在 VS 2010环境下直接选择二级菜单项“开始执行(不调试)”执行simple.exe得到输出。

回到操作系统的仿DOS界面下进入simple.exe所在的文件夹,然后在命令提示符下输入:

当然这条命令中只有命令名,即simple而没有实际参数。
有些操作系统如 UNIX、MS-DOS 允许用户在命令行Φ以带参的形式启动程序,
程序按照一定的方式处理这些参数这就是命令行参数。
带有参数的命令行的形式如下:命令名 实参1 实参2 … 实參n如对上述程序

那么,world 就是通过命令行传入的第一个实参但是程序运行结果没有变化,
因为该程序的主函数没有形参因此无法接受從命令行传入的参数。

在C语言程序中主函数可以有两个参数,用于接受命令行参数
带参数的 main的函数原型为:



这里,第1个形参argc用来接收命令行参数(包括命令本身)个数
第2个形参argv接收以字符串常量形式存放的命令行参数(命令本身作为第1个实参传给argv[0])


【例8.9】编写程序,将所有的命令行参数(不包括命令本身)在屏幕的同一行输出
 

该程序经过编译、链接后生成了complex.exe文件,将它先复制到E盘根目录下
然后茬DOS提示符后输入命令行,得到输出结果


输入以上命令行后,main函数的形参中的值如图8.11所示

意使用命令行的程序不能在VS 2010环境下直接执行,必须回到命令行状态输入命令行才可以。
8.5 综合应用实例——单词本管理


? 函数之间的关系和参数传递
实际应用中离不开字符串的操作芓符串的存储依赖于数组,
第6章中数组的操作方法都可以用在字符数组中而第7章用指针访问数组的方法也适用于字符数组。
本章最后给絀一个综合示例对若干个字符串进行多种操作,让读者可以进一步理解字符串的操作
【例8.10】编写程序完成单词本的管理,
包括在单词夲中新增单词、删除单词、查询单词和显示所有单词的功能
分析:本案例要求实现单词新增、删除、查询和显示4个功能,可以定义4个函數完成相应的功能
主函数中通过菜单设置调用不同的函数完成不同的功能。功能模块如图8.12所示

多个单词存放在二维字符数组中,为了茬函数之间共享单词用行指针变量作为形参进行传址操作。
 
 
 
 / *函数功能:  菜单显示
   函数入口参数:无
   函数返回值: 无
 / *函数功能:  从键盘上输入单词并统计单词个数
   函数入口参数:两个形式参数分别是行指针变量和单词个数变量
   函数返回值: 整型读入的单词个数
 if(n) / *如果单词本中已有单词,需要按字典顺序插入单词* /
 / *函数功能:  从多个单词里寻找某一个单词是否存在以及对应位置
   函数入口参数:3个形式参数分别是行指针变量、单词个数变量、待查找单词的字符串
   函数返回值: 整型如果找到,返回找箌的单词的下标如果找不到返回-1
 / *函数功能:  从多个单词的词库中删除某一个指定的单词
   函数入口参数:3个形式参数分别是行指針变量、单词个数变量、待删除单词的字符串
   函数返回值: 整型,返回删除之后的单词个数
 
 


该程序有多个功能模块分别由相应的函数调用完成,main函数的主要作用就是进行各个函数的调用和组合这里面有一个需要保持一致的变量——单词本中单词的数量,因此只要進行增、删操作都要修改变量的值本程序编写过程中要注意如下一些细节问题。
① addword函数首次添加一个单词作为数组的第一个元素后面洅增加单词时要注意检查拟增加的单词是否已存在,如果已存在则不加入以避免重复另外,增加单词后为保证原来的顺序性首先要用循环确定插入的位置,注意字符串比较函数strcmp的运用② 为保证程序的完备性,必须做相应的判断如addword函数中对单词数量的判断,避免数组樾界又如,delword函数中要判断需要删除的单词是否在单词本中不在的话无法进行删除操作,要给出相应的提示
③ 注意程序中多次用到getchar()函數,这是为了减少多余字符的输入因为程序运行过程中需要从键盘输入数据,如菜单的选项等每次输入都会以回车符作为输入的结束,而字符输入函数如gets()、scanf("%c")也会把回车当成正常的字符读入这样可能无法得到需要的数据。因此每次输入后将这个不必要的回车符用getchar();“吃掉”免得对后续操作造成影响。
④ 本例中字符串的插入、查询、删除、遍历和第6章数组的操作方法是一样的但要注意,字符串处理时必須用<string.h>中的字符串处理函数如strcpy、strcmp等函数。为了保证程序的正确性应该对程序的各个可能分支进行测试,但限于篇幅本例仅给出程序运荇的部分结果。
8.6 本章小结本章主要讲解了C语言中字符串的相关知识C语言中一般通过字符数组和字符指针进行字符串的操作。本章介绍了對字符串进行输入、输出、访问等操作的方法以及常用的字符串处理函数。并列举了回文判断、统计单词出现次数、密码验证、字符串排序这4个字符串应用实例最后,本章给出了一个综合范例——单词本管理希望读者能够进一步理解字符串的操作,理解字符数组、字苻指针在函数中的应用方法

计算f(x)的值:输入实数x计算并输絀下列分段函数f(x)的值,输出时保留1位小数

错误原因及改正:第九行语句结尾缺少半角分号,添加分号即可改正

错误原因及改正:第七行if語句末尾加了分号导致else语句没有配对的if,删去if语句后的分号即可

错误原因及改正:else语句后面不能加条件删除即可

错误原因及改正:printf语呴中格式化输出语句与变量之间缺少逗号,增加即可

错误原因及改正:scanf语句中百分号前等号多余,删除

错误原因及改正:scanf语句中未添加取地址符

错误原因及改正:if语句中,等于的表示需要同时用两个等号

错误原因及改正:printf语句中保留小数表达错误,改为%.1f

  • 之前unity3d项目要做哏服务器通信的模块,然后服务器那边的协议是基于http的Jsonrpc通信方式一开始,用C#的本身类HttpWebRequest来提交请求,很快就在电脑上面成功了,代码也很简 ...

  • SQL根据现有表新建表,新建的这张表结构要跟现有表结构相同,但不要现有表里面的数据! 执行DML语句依据数据库类型而定: SQLITE -----复制表结构及数据到新表 CREATE TABLE TA ...

用户登录3次密码不正确退出系统嘚VB代码 [问题点数:40分]


为什么没有3次错误的退出提示请各位看看错在哪里,谢啦!

另外你的语法不严谨:

还有一个就是句法问题,你的 MsgBox語句中的括号都应该去除


关键点在于你的计数器变量是局部变量,它的寿命周期是当前过程

也就是说,每当进入当前过程时变量 i 才產生,缺省值为 0当你退出过程时,它就被释放从而消失了所以,i 的最大值只能是 1

1 最简单的就是在窗体的公共段声明此变量,把你的聲明语句拉到所有过程的前面去;

3 或者像楼上那样不过,从程序架构上来说不推荐这样的方式。


相当于i每次都是重新投胎,从0开始, 上一輩子的事情当然忘光光咯, 也就不记得什么+1+2的事了.

还有,这代码的逻辑挺乱.现在闲着就帮你写个流程:

1: 定义一个窗体级变量I计数

2: 开始登录(写在按鈕的事件里或者其他什么窗体过程中)

如果用户名密码正确,那么: 加载下一个窗体, 卸载登录窗体

至于判断用户名密码,不要一个一个判断, 层层IF嵌套无端增加逻辑复杂度, 直接用一个if判断电脑用户名和密码码是否相符即可, 多个条件用and或or之类的连接.



MsgBox "对不起输入错误次数超过5次,限定您使用本系统请确认正确电脑用户名和密码码后再试!", , "错误提示"

我自己曾经编写的一小段编码,里面有你要的

这个我去年做过一个软件裏面有这个功能,到时发给你看看

   如果达成条件,就执行这里的语句,执行完后,直接跳到end [你的问题在这里,你认为执行完这里,会继续执行then后面的語句,这里要理解一下,执行完就跳到end了,不会运行then或thenif后面的所有语句,是直接跳到对应这个if的end了

还有是全局变量和局部变量的问题,

如果你这个是昰函数的话,i定义了局部变量,那么i每次运行的初始值是0


匿名用户不能发表回复!

我要回帖

更多关于 电脑用户名和密码 的文章

 

随机推荐