不怎么重要的前言
上一篇介绍了for loop的概念,让大家面对在有重複性、明确次数的处理时,可以使用这个语法来解决问题。
这次我们来介绍迴圈中另一个很重要的语法--「While Loop」!
While Loop?
其实while迴圈与for迴圈的概念是很像的,都是为了处理重複性内容而生,但两者最大的差别在于当没有明确的次数处理时,会变得很不适合使用for迴圈(也不是不能用,就是不适合),取而代之的便是while迴圈了。
我们来看下列的例子:
#include <stdio.h>int main(void){ int data; printf("plz input your data(>0): "); scanf("%d", &data); while(data > 0){ if(data%2 == 0){ printf("this data is even.\n"); } else{ printf("this data is odd.\n"); } printf("plz input your data(>0): "); scanf("%d", &data); } printf("---\n"); printf("thanks for your using\n"); return 0;}
我们让使用者输入数字来判断奇偶数,直到输入的数字小于0时终止程式,由于不晓得使用者会输入多少数字,所以这时候使用for loop相对的不适合,且这样的方式比较具有弹性。
正式使用
规则while迴圈是一个进入前、跑过一圈后判断条件,只要符合条件就会持续执行的迴圈。
(1) while迴圈的基本结构:「( )」包住的内容为条件判断,被「{ }」包住的内容为需重複执行的body。
while(data > 0){ if(data%2 == 0){ printf("this data is even.\n"); } else{ printf("this data is odd.\n"); } printf("plz input your data(>0): "); scanf("%d", &data);}
(2) 谨慎设条件,避免无限迴圈(程式出不去迴圈一直执行,会导致电脑当机或程式坏掉)。
(3) 读取到使用者输入才会执行的语法。
a. while(scanf("%d", &data) != EOF)
#include <stdio.h>int main(void){ int data; while(scanf("%d", &data) != EOF){ if(data%2 == 0){ printf("this data is even.\n"); } else{ printf("this data is odd.\n"); } } return 0;}
b. while(~scanf("%d", &data))
#include <stdio.h>int main(void){ int data; while(~scanf("%d", &data)){ if(data%2 == 0){ printf("this data is even.\n"); } else{ printf("this data is odd.\n"); } } return 0;}
c. while(scanf("%d", &data) != -1)
#include <stdio.h>int main(void){ int data; while(scanf("%d", &data) != -1){ if(data%2 == 0){ printf("this data is even.\n"); } else{ printf("this data is odd.\n"); } } return 0;}
(EOF的详细意义的可以参考这里)
应用while迴圈结合EOF的概念,搭配if条件判断、次数计算。
#include <stdio.h>int main(void){ int data, i=0; while(scanf("%d", &data) != EOF){ i++; if(data%2 == 0){ printf("Case %d: EVEN.\n", i); } else{ printf("Case %d: ODD.\n", i); } } return 0;}