程序清單6.1 summing.c函數
/*summing.c--對用戶輸入的整數求和*/ #include <stdio.h> int main (void) { long num; long sum=0L; /*把sum初始化爲0*/ int status; printf("Please enter an integer to be summed.(q to quit):\n"); status = scanf("%ld",&num); while (status==1) { sum=sum+num; printf("Please enter next integer (q to quit):\n"); status=scanf("%ld",&num); } printf("Those integer sum to %ld.\n",sum); return 0; }
6.11 程序註釋oop
這個循環的判斷表達式是:status==1;==運算符是C的相等運算符。當status的值不爲1時終止循環。ui
要使程序正確運行,在每次循環中應該爲num獲取一個新值,而且重置status。程序使用scanf()的兩個不一樣的功能作到這一點。首先使用scanf()來嘗試爲num讀入新值,而後使用scanf()的返回值來報告執行是否成功(scanf()返回成功讀取項目的個數)。若是您輸入的不是一個數字,例如q,那麼scanf()就不能讀入一個整數,因此它的返回值和status都爲0.這將使循環終止 。code
若是scanf()在嘗試轉換一個數值時遇到了問題(例如,檢測到文件的尾部或者遇到硬件問題),它就會返回一個特殊值EOF,這個值通常被定義爲-1.這個值一樣也會致使循環終止。get
總之,由於while循環是一個入口條件循環,因此程序必須在進入循環體以前獲取輸入並檢查status的值。這就是程序在while以前有一個scanf()調用的緣由。要使循環繼續執行,在循環中須要一個讀語句,這樣程序才能夠獲得下一個輸入的狀態。這就是程序在while循環的結尾處還有一個scanf()的緣由,它爲下一次循環作準備。能夠把以下用法作爲循環的標準格式:it
get first value to be testedio
whlie the test is successfulclass
process valuetest
get next valueobject
6.1.2 C風格的讀循環
下面的結構:
status = scanf("%ld",&num);
while (status==1)
{
/*loop actions*/
status == scanf("%ld",&num)
}
能夠用下面的形式代替:
while (scanf("%ld",&num)==1)
{
/* loop actions*/
}
第二種形式同時使用了scanf()的兩種不一樣用法。首先,若是調用成功,函數會把一個值放在num中;第二,函數的返回值(1或0)用來控制循環。