【从零开始的 C 语言笔记】第十九篇-While Loop(1)

不怎麽重要的前言

上一篇介绍了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;
}

https://ithelp.ithome.com.tw/upload/images/20211101/20142565ghqStvHK9C.png

我们让使用者输入数字来判断奇偶数,直到输入的数字小於0时终止程序,由於不晓得使用者会输入多少数字,所以这时候使用for loop相对的不适合,且这样的方式比较具有弹性。


正式使用

  1. 规则
    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);
}

https://ithelp.ithome.com.tw/upload/images/20211101/20142565cBcUfp3xkh.png

(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;
}

https://ithelp.ithome.com.tw/upload/images/20211101/20142565CNhJGMxb2q.png

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;
}

https://ithelp.ithome.com.tw/upload/images/20211101/201425654tniFfePtK.png

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;
}

https://ithelp.ithome.com.tw/upload/images/20211101/20142565BW1owLx92V.png

(EOF的详细意义的可以参考这里)

  1. 应用
    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;
}

https://ithelp.ithome.com.tw/upload/images/20211101/20142565XVnOXxsWEj.png


我们已经介绍完两个最常使用到的回圈了,大家可以多多尝试看看提到的语法,有助加深学习印象。

下一篇我们来提while回圈的延伸--「Do-While」!


<<:  用 Python 畅玩 Line bot - 30:Line Notify(三)

>>:  【从零开始的 C 语言笔记】第二十篇-While Loop(2)

Day 25 - 新鲜人协助面试新鲜人篇

租的公有云服务可以使用了,并且也把目前上架的平台搬移到新租的虚拟主机服务上,同时在资料库的部分也花了...

Dungeon Mizarka 009

整理进入Addressable资料 前几天利用Addressable进入载入资料时手动的将需要用到的...

[Day18] Esp32用STA mode + Relay - (程序码讲解)

1.前言 今天就不废话拉,直接进入主题(大家应该都去报复性出游了吧)。 2.html 其实HTML目...

[Day14] LDAP Injection

前言 Injection +1 ↑ 正文 概念 LDAP全称Lightweight Director...

D18 -「脉冲×宽度×调变」:建立控制组件

再来就是实际建立透过 select 选择的脚位,并建立相关 Firmata 功能。 建立 PWM 控...