1. 程式人生 > >《C++ Primer Plus》學習筆記——第五章 迴圈和關係表示式(三)

《C++ Primer Plus》學習筆記——第五章 迴圈和關係表示式(三)

迴圈與文字輸入

迴圈完成的一項最常見最重要的任務:逐字元地讀取來自檔案或鍵盤的文字。

cin物件支援三種不同模式的單字元輸入,其使用者介面各不相同。

使用原始的cin進行輸入:

通過迴圈來讀取鍵盤的文字輸入,則必須有辦法停止讀取。

一種方法是選擇某個特殊的字元(哨兵字元)來作為停止標記。

cin有自身的特點:

  1. 忽略空格和換行符
  2. 傳送給cin的輸入被緩衝,需要按下回車鍵。

使用cin.get(char)補救,它讀取輸入的下一個字元(即使他是空格)。但輸入仍被緩衝。

但在C語言中,這個函式存在錯誤,應使用&,而不是直接使用。

cin物件的三種不同模式的單字元輸入:

cin.get()     cin.get(ch)       cin.get(name,ArSize);name為陣列名,ArSize為讀取的字元數。

檔案尾條件(檢測檔案尾EOF)

檢測到EOF後,cin將兩位(eofbit和failbit)都設定為1,可以通過eof()和fail()來檢視是否被設定,如果設定則返回true,否則false。他們都是事後報告,需要放在讀取之後,注意fail()可用於更多實現中(常用)。

當EOF後會被標記,再次呼叫cin將不再讀取,需要用cin.clear()來清除EOF標記。

也C語言中的getchar()和putchar()。

巢狀迴圈和二維陣列

二維陣列更像一個表格——既有資料行又有資料列。

像下面的宣告:

            int maxtemps [4][5];

這意味著maxtemps是一個包含4個元素的陣列,每個元素由5個整陣列成。

可以使用巢狀的for迴圈來顯示陣列元素。

for (int row=0;row<4;row++)
{
    for (int col=0;col<5;col++)
        {
            cout<<maxtemps[row][col];
        }
    cout<<enl;
}

初始化二維陣列:

例:

int maxtemps[4][5]=
{
    {96,100,87,101,105},
    {96,98,91,109,105},
    ……,
    ……
};

二維陣列的規則可以參考一維陣列。