while()語句括號中是一個邏輯表達式,用以判斷while循環是否需要繼續執行。可以是賦值語句。
while循環的一般格式為:
while(expr)
{
;//body
}
其中用來判斷循環條件的expr可以是任意表達式。當其是賦值語句的時候,含義為:先執行賦值語句,然后對左值進行判斷。如果左值為0則expr為假,while退出;否則expr為真,while繼續循環。
不過直接用賦值語句做expr時,編譯器可能為認為賦值操作符=是等於判斷符==的誤寫,這時編譯器可能會報一個警告(warning),編譯器是否報警,及報警告還是錯誤(error)取決於編譯器設置。為避免這種情況,可以用while((var = expr))的形式,告知編譯器就是要先賦值再判斷,編譯器就不會理會了。
下面是舉一個例子用來輔助說明。
函數功能,將參數字符串中的所有值按照ascii碼進行累加,獲取校驗和,溢出后只取低字節值。
char sum(char* p) { char c; char sum = 0; while((c = *p ++))//讀取字符串中的字符,直到字符串結尾。 這里用的就是一個賦值的方式。先把*p賦值給c,然后執行指針移位,再判斷c的值,如果c值為0,代表字符串結束,退出循環。 { sum+=c;//累加值,不考慮溢出。 } return c;//返回校驗和 }