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嗎?