做題的時候有時會用到getchar()接收換行符,然而讓人困惑的是一般使用scanf("%s", str)這樣的形式讀取字串的時候似乎並沒有考慮這個問題。網上通常會給你講大道理緩衝區啥的,然後聽懂後自己得不得的出結論全看天賦(攤手),所以在這裡直接下結論了:
1.乙個scanf後的確有回車在緩衝區裡,但是scanf("%s", str)這樣的不會把之前留下的換行符讀取掉(就是無視了)。這就是平時用%s解決「乙個數字,後面跟n個字串」這樣的輸入沒有問題的原因。
2.相對的,如果用%c,那就要考慮接收換行符的事情了,在這裡插入描述
例如這樣的話,在緩衝區的空格就會被讀取,所以兩個scanf中間需要getchar()。(再次吐槽某些實驗,貼出**一長串還要自己先找關鍵**段)
3.gets()也是會讀取之前留下來的換行符的,所以也需要乙個getchar()。類似實驗可以參照2的截圖,設定斷點或者用printf檢視輸出結果都行。
什麼時候使用引用 什麼時候使用指標
使用引用引數的主要原因有兩個 程式設計師能修改呼叫函式中的資料物件 通過傳遞引用而不是整個資料 物件,可以提高程式的執行速度一般的原則 對於使用引用的值而不做修改的函式 如果資料物件很小,如內建資料型別或者小型結構,則按照值傳遞 如果資料物件是陣列,則使用指標 唯一的選擇 並且指標宣告為指向cons...
什麼時候使用抽象類, 什麼時候使用介面
介面是一種協定,抽象類則相當於類模板。使用抽象類,而不要使用介面來分離協定與實現。如果需要提供多型層次結構的值型別,使用介面。如果乙個型別必須實現多個協定,或者協定適用於多種型別,使用介面。雖然抽象類和介面都支援將協定與實現分離開來,但介面不能指定以後版本中的新成員,而抽象類可以根據需要新增成員以支...
什麼時候使用介面,什麼時候使用抽象類
使用抽象類是為了 的復用,而使用介面的動機是為了實現多型性。抽象類適合用來定義某個領域的固有屬性,也就是本質,介面適合用來定義某個領域的擴充套件功能。一 什麼時候使用抽象類?當2個或多個類中有重複部分的時候,我們可以抽象出來乙個基類,如果希望這個基類不能被例項化,就可以把這個基類設計成抽象類。當需要...