4、循环结构

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值