1.scanf的輸入格式,空格、TAB和回車符都是無關緊要,所以按Enter鍵並不意味著輸入結束。
告訴程序輸入結束的方式:
在windows下,輸入完畢後先按Enter鍵,再按Ctrl+Z鍵,最後再按Enter鍵。
在linux下,輸入完畢後按Ctrl+D鍵
2.gcc 編譯選項
-Wall指出警告
-ansi 判斷是否和ANSI沖突
-pedantic 比ansi更加嚴格
-lm 鏈接數學庫, C++編譯器會自動鏈接
-DDEBUG 編譯時定義符號DEBUG,可以換成其它,如-DLOCAL將定義符號LOCAL
3.兩種使用文件輸入輸出的方法:重定向和fopen:
重定向示例:
freopen("data.in","r",stdin); freopen("data.out","w",stdout);
fopen示例:
#include<stdio.h> FILE *fin, *fout; fin = fopen("data.in", "rb"); fout = fopen("data.out", "wb"); fscanf(fin, "%d", &x); fprintf(fout, "%d", x); fclose(fin); fclose(fout);
4.使用printf和scanf輸入輸出long long在linux中gcc很統一的用%lld;在windows中,MinGW的gcc和VC6都需要用%I64d,但VS2008卻是用%lld
5.可以使用#define A B程序中的A全部替換成B
6.比較大的數組應盡量聲明在main函數外
7.使用fgetc(fin)可以從打開的文件fin中讀取一個字符。一般情況下應當檢查它不是EOF後再轉換成char值。
從標准輸入輸出取一個字符用getchar,相當於fgetc(stdin);
8.fgets(buf, MAXN, fin)將讀取完整的一行放在字符數組buf中,應當保證buf足夠存放下文件的一行內容。除了在文件結束前沒有遇到'\n'這種特殊情況外,buf總是以‘\n’結尾。當一個字符都沒有讀到時,fgets返回NULL。
fgets相比gets更安全,有MAXN限制。
getline: istream& getline(istream &is, string &str, char delim)
istream& getline(istream &is, string &str)這種情況delim為換行
getline會讀取delim並丟棄。
例如getline(cin, name,'\n');
istream::getline :istream& getline(char *s, streamsize n) 這種情況delim為換行
istream& getline(char *s, streamsize n, char delim)
例如cin.getline(s,100,'\n');
9.頭文件ctype.h中定義的isalpha,isdigit,isprint等工具可以用來判斷字符的屬性,而toupper、tolower等工具可以用來轉換大小寫。
10.string.c_str()返回的內容是只讀的。
11.使用assert.h中的assert宏來限制非法函數調用
assert(x>0);
當x≤0時代碼將異常終止。
12.gdb用bt(backtrace)命令打印所有棧幀信息,up命令選擇上一個棧幀。