• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(8)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜


            1、使用原始的cin進行輸入
                  如果程序要使用循環(huán)來讀取來自鍵盤的文本輸入,則必須有辦法知道何時停止讀取。如何知道這一點呢?一種方法使選擇某個特殊字符——有時被稱為哨兵字符(sentinel character),將其作為停止標記。
                  下面程序,遇到#字符時停止讀取輸入。該程序計算讀取的字符數(shù),并回顯這些字符,即在屏幕上顯示讀取的字符。按下鍵盤上的鍵不能自動將字符顯示到屏幕上,程序必須通過回顯輸入字符來完成這項工作。通常,這種任務(wù)由操作系統(tǒng)處理。在這個程序中,操作系統(tǒng)和測試程序都回顯輸入。運行完畢后,該程序報告處理的總字符數(shù)

            #include "stdafx.h"
            #include 
            <iostream>
            using namespace std;
            int main(int argc, char* argv[])
            {
                
            char ch;
                
            int count=0;    //use basic input
                cout<<"Enter characters; enter # to quit:\n";
                cin
            >>ch;    //get a character
                while(ch!='#')    //test the character
                {
                    cout
            <<ch;    //echo the character
                    ++count;    //count hte character
                    cin>>ch;    //get the next character
                }

                cout
            <<endl<<count<<" characters read\n";
                
            return 0;
                
            //該程序忽略空白字符
            }
                  程序說明:請注意該程序的結(jié)構(gòu)。該程序在循環(huán)之前讀取第一個輸入字符,這樣循環(huán)可以測試第一個字符。因為第一個字符可能是#。
                  為什么該程序省略了空格呢?原因在cin。讀取char值時,與讀取其他基本類型一樣,cin將忽略空格和換行符。因此輸入中的空格沒有被回顯,也沒有被包括在計數(shù)內(nèi)。
                  更為復雜的是,發(fā)送給cin的輸入被緩沖。這意味著只有在用戶按下回車鍵后,他輸入的內(nèi)容才會被發(fā)送給程序。這就是在運行該程序時,可以在#后面輸入字符的原因。按下回車鍵后,整個字符序列將被發(fā)送給程序,但程序在遇到#字符后將結(jié)束對輸入的處理。

            2、使用cin.get(char)進行補救
                  通常,逐個字符讀取輸入的程序需要檢查每個字符,包括空格、制表符和換行符。cin所屬的istream類(在iostream中定義)包含一個能夠滿足這種要求的成員函數(shù)。具體地說,成員函數(shù)cin.get(ch)讀取輸入中的下一個字符(即使它是空格),并將其賦給變量ch。使用這個函數(shù)調(diào)用替換cin>>ch,可以修補第一個程序的問題。
                  
            #include "stdafx.h"
            #include 
            <iostream>
            using namespace std;
            int main(int argc, char* argv[])
            {
                
            char ch;
                
            int count=0;    
                cout
            <<"Enter characters; enter # to quit:\n";
                cin.
            get(ch);    
                
            while(ch!='#')    //test the character
                {
                    cout
            <<ch;    
                    
            ++count;    
                    cin.
            get(ch);    
                }

                cout
            <<endl<<count<<" characters read\n";
                
            return 0;
            }
                  該程序回顯了每個字符,并將全部字符計算在內(nèi),其中包括空格。輸入仍被緩沖,因此輸入的字符個數(shù)仍可能比最終到達程序的要多。
                  如果熟悉C語言,可能以為這個程序存在嚴重的錯誤。cin.get(ch)調(diào)用將一個值放在ch變量中,這意味著將修改該變量的值。在C語言中,要修改變量的值,必須將變量的地址傳遞給函數(shù)。但上面程序中,調(diào)用cin.get()時,傳遞的是ch,而不是&ch。在C語言中,這樣的代碼無效,但在C++中有效,只要函數(shù)將參數(shù)聲明為引用即可。引用是C++中的一種新類型。頭文件iostream將cin.get(ch)的參數(shù)聲明為引用類型,因此該函數(shù)可以修改其參數(shù)的值。

            3、文件尾條件
                  如果輸入來自文件,則可以使用一種功能更強大的技術(shù)——檢測文件尾(EOF)。C++輸入工具和操作系統(tǒng)協(xié)同工作,來檢測文件尾并將這種信息告知程序。讀取文件中的信息同cin和鍵盤輸入存在兩個相關(guān)的地方:首先,很多操作系統(tǒng)(包括UNIXMS-DOS)支持重定向,允許用文本替換鍵盤輸入。加入,假設(shè)在MS-DOS中有一個名為gofish.exe的可執(zhí)行程序和一個名為fishtale的文本文件,則開一個在DOS提示符下輸入下面的命令:gofish <fishtale。這樣,程序?qū)?/span>fishtale文件(而不是鍵盤)獲取輸入。<符號式UNIXDOS上的重定向操作符。其次,很多操作系統(tǒng)都允許通過鍵盤來模擬文件尾條件。如果編程環(huán)境能夠檢測EOF,可以在程序中使用重定向的文件,也可以使用鍵盤輸入,并在鍵盤中輸入中模擬EOF。那么,檢測到EOF后,cin將兩位(eofbitfailbit)都設(shè)置為1??梢酝ㄟ^成員函數(shù)eof()來查看eofbit是否被設(shè)置;如果檢測到EOF,則cin.eof()將返回booltrue,否則返回false。同樣,如果eofbitfailbit被設(shè)置為1,則fail()成員函數(shù)返回true,否則返回false。注意,eof()fail()方法報告最近讀取的結(jié)果,也就是說,它們在事后報告,而不是預先報告。因此應(yīng)將cin.eof()cin.fail()測試放在讀取后。fail(),相對于eof(),可用于更多的實現(xiàn)中。
            #include "stdafx.h"
            #include 
            <iostream>
            using namespace std;
            int main(int argc, char* argv[])
            {
                
            char ch;
                
            int count=0;    
                cout
            <<"Enter characters; enter # to quit:\n";
                cin.
            get(ch);    
                
            while(cin.fail()==false)    //test for EOF
                {
                    cout
            <<ch;    
                    
            ++count;    
                    cin.
            get(ch);    
                }

                cout
            <<endl<<count<<" characters read\n";
                
            return 0;
            }

            程序運行狀況:


                  通過使用重定向,可以用該程序來顯示文本文件,并報告它所包含的字符數(shù)。
            posted on 2010-02-06 20:48 煙皚 閱讀(951) 評論(0)  編輯 收藏 引用 所屬分類: C++ primer plus學習筆記
            国产精品久久久久乳精品爆 | 久久无码中文字幕东京热| 7国产欧美日韩综合天堂中文久久久久 | 亚洲国产精品成人久久蜜臀 | 成人免费网站久久久| 岛国搬运www久久| 久久久久亚洲AV无码专区首JN | 久久夜色精品国产亚洲| 97久久精品无码一区二区| 亚洲欧美日韩久久精品| 久久久久久久97| 99久久国产亚洲综合精品| 国产精品九九九久久九九| 少妇无套内谢久久久久| 99久久精品国产综合一区 | 日韩精品无码久久一区二区三| 久久久久久午夜成人影院 | 亚洲AV无码久久精品蜜桃| 久久久久无码精品| 色偷偷888欧美精品久久久| 久久精品水蜜桃av综合天堂| 久久婷婷五月综合成人D啪| 超级碰久久免费公开视频| 国产91色综合久久免费分享| 亚洲∧v久久久无码精品| 亚洲国产天堂久久久久久| 狠狠人妻久久久久久综合蜜桃| 精品永久久福利一区二区 | 久久精品国产一区二区三区| 久久精品国产亚洲一区二区| 久久影院综合精品| 久久中文骚妇内射| 精品少妇人妻av无码久久| 中文字幕乱码人妻无码久久| 综合久久给合久久狠狠狠97色 | 91精品国产高清久久久久久io| 久久精品国产清自在天天线 | 国内精品伊人久久久久网站| 香港aa三级久久三级| 国产高潮久久免费观看| 狠狠色综合网站久久久久久久 |