書上的一段代碼學到的東西

幾個關鍵點

  1. 從 while((ch = getchar()) != EOF && ch != ‘\n’); 中,可以學到的是:

    首先要回憶一下之前文章裏面的連續兩行使用scanf函數時,爲什麼第二個scanf函數沒有起作用。因爲不管是scanf還是gets函數,在進行讀取用戶輸入時都不會讀取最後的換行符,所以換行符還保留在輸入流中,所以這裏使用這個 while 來清楚輸入流裏面的 換行符。
    此外,還需注意這裏的變量 ch,這是一個整數而不是字符。這是因爲EOF是一個整數值,它的位數比字符類型要多,把ch聲明爲整型可以防止從輸入讀取的字符意外地被解釋爲EOF。但同時,這也意味着接受字符的ch必須足夠大,足以容納EOF。

  2. 從 while(gets(input) != NULL) 中,可以學到的是:

    一行輸入由一串字符組成,以一個換行符(newline)結尾。gets函數會丟棄換行符,並在該行的末尾存儲一個NUL字節(一個NUL字節是指字節模式爲全0的字節,類似’\0’這樣的字符常量)。然後,gets函數返回一個非NULL值,表示該行已經被成功讀取。當gets函數被調用但事實上不存在輸入時,他就返回NULL值,表示他達到了輸入的末尾(文件尾)。

  3. 從 while(num < max && scanf("%d", &columns[num]) == 1 && columns[num] >= 0) 中,可以學到的是:

    scanf每次調用時都從標準輸入中讀取一個十進制整數。如果轉換失敗,不管是因爲文件是否去玩還是因爲下一個輸入的字符無法轉換爲整數,scanf都會返回0,這樣就會使整個循環終止。如果輸入的字符可以合法地轉換爲整數,那麼這個值就會轉換爲二進制數存儲與數組元素columns[num]中,然後scanf函數返回1 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章