status == 1 使用相等運算符 ==。scanf() 返回成功讀取項目數;非整數輸入返回 0。get first valuewhile (test successful) process value get next valuestatus = scanf("%ld", &num); while (status == 1) 可簡寫為 while (scanf("%ld", &num) == 1),利用 C 語法特性使代碼更精簡。
while 語句while (expression)
statement;
statement 可以是簡單語句或花括號包裹的復合語句。
while 是入口條件循環。循環體必須包含改變判斷表達式值的語句,最終使其為假。僅在計算條件時決定是否繼續。
例:跳過輸入直到首個非空白/非數字字符:
while (scanf("%d", &sum) == 1) ;
空語句獨佔一行提示程序員此為有意設計。
運算符:< <= == >= > !=。
浮點數比較建議僅用 < 和 >,避免捨入誤差導致邏輯相等的數不相等。可用 math.h 中 fabs() 比較絕對差值。
while (goats != 0) 等價於 while (goats)。5 == canoes,誤寫 = 會報錯。_Bool 類型,值只能為 1 或 0。關系運算符優先級低於算術運算符、高於賦值運算符。
高優先組:< <= > >=(左結合)
低優先組:== !=(左結合)
for 循環for (init; condition; update)
statement;
printf())。複合賦值:x *= 3*y + 12 等價於 x = x * (3*y + 12)。
do while 循環do
statement;
while (expression);
for/while 可零次執行。\0 的字符數組即字串。#define 常量。Q1:for (value=36; value>0; value/=2) printf("%3d", value); 輸出:36 18 9 4 2 1
Q2:若 value 為 double,條件 value>0 在值小於 1 時仍為真,導致無限循環直到浮點下溢為 0;且 %3d 格式錯誤。