C++學習筆記(一)__C++

來源:互聯網
上載者:User

C++
Primer Plus習題
第五章編程練習7:設計一個名為car的結構,用它儲存下述有關汽車的資訊:生產商(儲存在字元數組或string對象中的字串)、生產年份(整數)。編寫一個程式,向使用者詢問有多少輛車。隨後,程式使用new來建立一個由相應數量的car結構組成的動態數組。
我編的程式如下: include

using namespace std;
struct car
{
char maker[20];
int years;
};
int main()
{
int i_limit,i;
cout<<”How many cars do you wish to catalog? “;
cin>>i_limit;

car *ps=new car[i_limit];for(i=0;i<i_limit;i++){    cout<<"Car #"<<i+1<<": "<<endl;    cout<< unitbuf <<"Please Enter the maker: ";    ******//cin.ignore();    //fflush(stdin);******    cin.getline(((ps+i)->maker),20);    cout<<endl<<"Please Enter the year made: ";    cin>>(ps+i)->years;    cout<<endl;}cout<<"Here is your collection: "<< endl;for(i=0;i<i_limit;i++){    cout<<(ps+i)->years<<"  "<<(ps+i)->maker<<endl;}delete [] ps;cin.get();cin.get();return 0;

}
斜體部分注釋掉之後結果如下:
程式沒有等待輸入maker

使用cin.ignore();或者fflush(stdin);清除緩衝之後就可以完成習題要求了。

學習心得:
不使用cin.ignore()時,沒有等待輸入maker。主要是因為cin.getline的讀取原理,它是將以‘/n’為結束符做為一完整讀取的一行,’/n’會讀但不會賦值給數組。所以當之前用cin讀取一個字元的時候,你會輸入一個字元然後點擊斷行符號,那麼下面cin.getline讀的時候會讀入這個斷行符號,並判斷結束了,然後賦值給數組第一行,這樣數組第一行就是空行。

擴充來說,cin.ignore()的用法如下:
cin.ignore(a,ch)方法是從輸入資料流(cin)中提取字元,提取的字元被忽略(ignore),不被使用。每拋棄一個字元,它都要計數和比較字元:如果計數值達到a或者被拋棄的字元是ch,則cin.ignore()函數執行終止;否則,它繼續等待。它的一個常用功能就是用來清除以斷行符號結束的輸入緩衝區的內容,消除上一次輸入對下一次輸入的影響。比如可以這麼用:cin.ignore(1024,’\n’),通常把第一個參數設定得足夠大,這樣實際上總是只有第二個參數’\n’起作用,所以這一句就是把斷行符號(包括斷行符號)之前的所以字元從輸入緩衝(流)中清除出去。

備忘:在這個程式中,還沒有弄清楚結構體數組的用法。因此結果雖然正確,但是程式有可能可以簡化。至於這一塊下一次看到了再弄清楚。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.