天天看點

C++ 瑣碎

注意用fstream建立檔案時,不能指定ios::in 參數,否則當檔案不存在時不會自動建立

  char *fileName = "C://input.txt" ; 

fstream fs(fileName, ios::in | ios::out, ios::trunc);  

當fileName對應的檔案不存在時,不會自動建立

但是如果寫成

  char *fileName = "C://input.txt" ; 

fstream fs(fileName, ios::out, ios::trunc) ;  

如果檔案不存在那麼就會自動建立一個

定位到了檔案之後重新定位到螢幕輸出 freopen("CON", "r", stdin); 

freopen("CON", "r", stdout);   //CON  是控制台的另外一個裝置檔案名

cout帶緩沖輸出,printf不帶緩沖輸出??

輸入字元串時, cin.get不會忽略有效字元前的字元,同時在輸入結束時會将\n留在輸入流中 類似于scanf?

scanf之後再genline(cin, str)的話, str也是空字元串。

能将整數轉換為字元串而且與ANSI标準相容的方法是使用sprintf()函數 int num = 100; char str[25]; sprintf(str, "%d", num);

1.注意 如果格式字元串中存在空格 scanf則表示可以跳過一切空白字元 包括空格 換行符 制表符等

2.在C語言中,接受輸入單個字元的函數如scanf、getchar()等都有一個毛病, 就是程式接受完使用者輸入的字元後并沒有清空鍵盤輸入緩沖區(或者說标準輸入流),,是以當使用者輸完字元和回車後,回車字元還留在标準輸入流中,而gets函數又恰好從緩沖區的目前字元開始接收輸入,這樣,它接收的到第一個字元就是上次輸入遺留下來的回車符号,于是程式又會把它作為結束輸入的标志,不再接受使用者的鍵盤輸入。     而C++的輸入流就改正了這個毛病,接受完後自動清空輸入流。 

語句fflush(stdin);的作用就是清空目前的标準輸入流(即鍵盤緩沖區。)

3.getline(ss, str, ' '); getline分隔字元串

4.如果在不知道記憶體具體需求的時候,使用deque絕對是比vector好的

5.c++清空輸入緩沖區 cin.clear() cin.sync()

6.一個無向圖存在歐拉回路,當且僅當該圖所有頂點度數都是偶數

7.程式員隻能為類類型或枚舉類型的操作數定義重載操作符

8.不能簡單的把指針了解為位址,而應該是指向一塊記憶體區域的起始位址。指向區域的大小視指針變量的類型而定。

extern  void  func() {     printf( "111\n" );      int  a[11];     printf( "a=%d\n" , a);     printf( "&a=%d\n" , &a);     printf( "a+1=%d\n" , a+1);     printf( "&a+1=%d\n" , &a+1);      //&a指向的是int[11]類型的指針變量,區域是int*11     // int a[11] 變形為 int* (&a)[11] } 結果:

111

a=4455100

&a=4455100

a+1=4455104

&a+1=4455144

請按任意鍵繼續. . .

9.return與exit()的差別

調用exit()函數會 結束目前程序,同時 删除子程序所占用的記憶體空間,把傳回資訊傳給父程序。 return僅表示調用堆棧的傳回,其作用是傳回函數值,并且推出目前執行的函數體,傳回到函數的調用處。 在main()函數中執行return n和exit(n)是等價的。

10. 指針數組與數組指針

int *p[8], 指針數組,p是數組元素為指針的數組, 本質為數組,p先于[]結合,說明p是一個數組,然後再與*結合說明數組p的元素是指向整型資料的指針。

int (*p)[8],p先與*組合,形成一個指針,該指針指向的是有8個整型元素數組,p即為指向數組首元素位址的指針,其 本質為指針

c++

繼續閱讀