程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 如何更好的進行C++代碼編譯

如何更好的進行C++代碼編譯

編輯:C++入門知識

在剛剛剛開始學C++代碼時遇到一個問題,這個問題導致程序不能夠完全的進行運行,看完本文後對您一定會大有幫助,下文除了學習C++代碼的基本性質外還對C++代碼的編程進行全面研究。如下代碼:

  1. #include    
  2. int main()   
  3. ...{   
  4. char a,b;   
  5. printf("Please input the first character:");   
  6. scanf("%c", &a);   
  7. printf("Please input the second character:");   
  8. scanf("%c", &b);   
  9. printf("The two characters are %c, %c", a, b);   
  10. return 0;   

程序運行結果如下:而下面這段程序卻可以正常運行:

運行結果如下:

  1. #include    
  2. int main()   
  3. ...{   
  4. char a;   
  5. int b;   
  6. printf("Please input the first character:");   
  7. scanf("%c", &a);   
  8. printf("Please input the second integer:");   
  9. scanf("%d", &b);   
  10. printf("The two characters are %c, %d", a, b);   
  11. return 0;   

當時對這個問題很困惑,時間一長就慢慢淡忘了。昨天一個同學問到一個C++運算符重載的問題,如下代碼,其中的while循環起什麼作用,好像注釋掉後程序運行沒什麼差別:

  1. iostream& operator >> (iostream& is, b& s)   
  2. ...{   
  3. char temp[b::MAX] = ...{0};   
  4. is.get();   
  5. is.get(temp, b::MAX);   
  6. if(strlen(temp)>0)   
  7. ...{   
  8. strncpy(b.str, temp, b::MAX);   
  9. }   
  10. while(is && is.get()!=' ')   
  11. ...{   
  12. continue;   
  13. }   
  14. return is;   

果然,當輸入字符串小於b::MAX時一切正常,當超過b::MAX時,當輸入完第一個字符串回車後,沒等輸入第二個字符串,程序就把b1和b2的內容都顯示出來了,而b2 的內容正是輸入的字符串超過b::MAX長度的部分,說明前面的分析是正確的。

今天又想起這個問題,突然聯想到以前C++語言的兩個scanf連用產生的問題,靈機一動,難道也是輸入緩沖區沒有自動清空產生的問題?當連續用scanf輸入兩個字符的時候,輸入第一個字符後回車。

結果換行符被當作第二個字符輸入了,scanf可不會區分什麼換行符還是普通字符,而當輸入一個字符,再輸入一個整數時,因為類型不匹配的原因,scanf會將換行符忽略而等待輸入正確的整數後才返回,所以得到了正確的結果,哈哈,原來如此!!!


可見,C++中的標准輸入流已經對於換行符做了處理,看來在C++中利用標准輸入處理特殊字符要自己做一些工作了

  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved