C Primer Plus 第6章 C控制語句:循環 6.1 再探while循環

程序清單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)用來控制循環。

相關文章
相關標籤/搜索