4、循环结构
2015-10-27 14:10
267 查看
while
while (条件表达式) { //条件表达式为真,执⾏循环体,⼀旦条件表达式为假,循环停⽌。 语句 }
随机数函数:arc4random()
返回随机一个[a,b]范围内的整数公式:arc4random()%(b-a+1)+a;break\continue
break:
switch语句中作用:跳出switch语句循环体中作用:跳出循环(通常与if连用)
continue:
结束本次循环,continue后面的代码不再执行,直接进入下次循环do-while循环(先斩后奏)
do { //先执⾏循环体,再判断循环条件,直到条件不满⾜的时候,循环结束语句 } while (条件表达式);
for循环
for ( 循环变量初始化; 循环条件; 循环增量 ) { //循环条件为真,执⾏循环体 语句 }
总结
for最常用,通常用于知道循环次数的循环while也很常用,通常用于不知道循环次数的循环
do-while,通常用于需要先执行一次的循环
break跳出循环,结束循环,continue结束本次循环,通常与if连用
例题
运行结果:
原因:
因为 scanf %c 只是读入一个字符,而你在输入时实际上输入的是:某个字符
+Enter,Enter 产生的\n 也会停留在输入缓冲区中,下次调用 scanf %c 时就会直接读到
它而不是等待你再次输入!同理,getchar()也有类似的行为。所以我们才不提倡使用
scanf(“%c”, …),尤其是把它在循环中。
解决的方法:
将 scanf(“%c”, &ch); 修改为:scanf(” %c”, &ch); //在%前加上一个空格
将 scanf(“%c”, &ch); 修改为:scanf(“%c%*c”, &ch);
函数名: fflush
功 能: 清除一个流
用 法: int fflush(FILE *stream);
#include 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'); return 0; }
如何处理 scanf()函数误输入造成程序死锁或出错?
#include int main() { int a,b,c; /*计算 a+b*/scanf("%d,%d",&a,&b); c=a+b; printf("%d+%d=%d",a,b,c); return 0; }
如上程序,如果正确输入 a,b 的值,那么没什么问题。但是,不能保证使用者每一次都能正确输入,一旦输入了错误的类型,你的程序不是死锁,就是得到一个错误的结果,这可能所有人都遇到过的问题吧?
解决方法:
scanf()函数执行成功时的返回值是成功读取的变量数,即:这个 scanf ()函数有几个变量,如果 scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还个有残余信息问题。
正确的例程:
#include 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); return 0; }
相关文章推荐
- HBase的特征和优点
- 软件开发报价的计算方法
- 数据结构之---树
- 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法
- C#日期格式转换大全
- oracle字符函数
- mysql explain type连接类型示例
- 快速排序
- VMware下共享Windows下文件夹 基于ubuntu12.04
- 阿里云 centos 修改iptables
- 读取web外的配置文件
- C++primer学习:重载运算符(4)
- 服务器上跑Edge box eccv 时候出现的问题
- Android - Fragment 控件Activity里的控件并的显示与隐藏
- 用shape、selector自定义样式美化控件
- 【iOS】UITableView的上拉加载更多和下拉刷新原理
- ie下jquery.getJSON的缓存问题的处理方法
- macosx 10.11 python pip install 出现错误OSError: [Errno 1] Operation not permitted:
- PHPCMS V9调用全站数据
- linux学习 文件权限与目录配置