1. 程式人生 > 實用技巧 >c語言的while死迴圈使用

c語言的while死迴圈使用

上星期群裡剛上大一學c語言的朋友問了一道題目,要求是這樣的:
“迴圈輸入一串數字,當輸入到-1為止,將-1前的所有資料求和並求出平均數,並保留兩位小數”
例如
“輸入:1,2,3,-1 輸出:2.00”
“輸入:-1 輸出:無資料”
因為不定數輸入的問題,很顯然對於剛學到if,for,while的大一新生來說有些困難,所以在這邊聊一下關於老師不讓你寫的“死迴圈”和不建議去寫的“break”的問題。

那麼就有人問了:磚!什麼是死迴圈呢?
死迴圈簡單講就是一個永久停不下來的迴圈,典型的死迴圈問題就是“套娃”(x)。
正經的講,迴圈是怎麼進行的呢?例如while迴圈的用法規則,
while(條件){語句}


條件給的返回值是一個布林值,常用的布林值有:True,False,0,1
對於while來說條件處於True或者1時,就會進行迴圈體內的語句,而條件處於False或者0時它就會停止迴圈,
那麼如果條件一直為True它將一直進行迴圈,一直進行迴圈體中的語句(就會和你的電腦比誰命長)這種迴圈就是死迴圈。
例如:

int i =1;
while(i == 1){語句}

這裡的i == 1返回值為布林值True,也就是說如果不改變i的資料它會一直迴圈到天荒地老。
你想讓這個迴圈停下來也很簡單,只需要讓while內的條件也就是 i == 1的返回值變為False就好。
例如:

int i = 1;
while(i==1){
i = 2;}

如果放在這個題目中也不失為一種解法,不過這偏離死迴圈和break的主題了。
下面就扯一下break的使用了:
break在迴圈中的用法是跳出當前迴圈,原理很簡單,當你認為一個迴圈該停了以後就可以break掉它
例如:

while(true){
break;}

啪,很快啊,這小夥子(x)這小迴圈直接就停掉了
break有個特性就是僅能跳出當前執行的迴圈
例如這一部分程式碼:

while(true){
for(i = 1;i<5;i++){
break;}
}

這個一個break並不能跳出while迴圈,當執行到break時他會從for迴圈中跳到while迴圈中繼續進行while迴圈注:if不是迴圈


如果全部跳出則需要:

while(true){
for(i = 1;i<5;i++){
break;}
break;}

下面就是關於這些的操作例項,拿朋友問我的那道題做演示:
1、題目要求是做一個迴圈輸入,這裡用到了一個while(true)去做一個所謂的死迴圈
2、當輸入到-1時需要做一個迴圈跳出,於是拿一個if做條件判斷進行break操作
具體程式碼如下:

#include <stdio.h>
int main()
{
    int in ;
    float i = 0 ,key, sum =0;
	while(true){/*死迴圈*/
	    scanf("%d",&in);
	    if (in == -1){/*對輸入的值進行判斷*/
	        break;/*跳出while迴圈*/
	    }
	    sum = sum + in;
	        i = i + 1;
	}
	if (i != 0){/*對計數i的數值進行判斷,如果有則輸出平均數key,如果沒有資料(指第一個資料就輸入了-1)則輸出無資料*/
	    key = sum/i;
	    printf("%.2f",key);
	}
	else{
	    printf("無資料");
	}
return 0;
}

所以0的存在本身就是一個False,有1嗎?