①經常使用的函數及庫ios
②當心使用全局變量數組
例如:函數
#include<cstdio>spa
int g = 0; code
int f() { g++; return g; } //修改全局變量的函數 blog
int main() {ci
int a = f();字符串
int b = f();get
printf("%d %d\n", a, b);string
return 0; }
運行後a!=b。
③精度問題
#include<cstdio>
int main() {
double f;
for(f = 2; f > 1; f -= 1e-6);
printf("%.7f\n", f);
printf("%.7f\n", f / 4);
printf("%.1f\n", f / 4);
return 0; }
輸出以下:
0.9999990
0.2499998
0.2
分析發現,在不斷減1e-6的過程當中出現了偏差,使得循環終止時f並不等於1,而是比1小 一點。在除以4保留1位小數時成了0.2。若是不出現偏差,正確答案應該是0.25四捨五入保留 一位小數,即0.3。有 一種方法能夠緩解這種狀況:加上一個EPS之後再輸出。這裏的EPS一般取一個比最低精度 還要小几個數量級的小實數。例如,要求保留3位小數時取EPS爲1e-6。(可是不老是可行的)
④C++ string類型
C++提供了一個新的string類型,用來替代C語言中的字符數組。用戶仍然能夠繼續用 字符數組當字符串用,可是若是但願程序更加簡單、天然,string類型每每是更好的選擇。 例如,C++的cin/cout能夠直接讀寫string類型,卻不能讀寫字符數組;string類型還能夠像 整數那樣「相加」,而在C語言裏只能使用strcat函數。
例題:輸入數據的每行包含若干個(至少一個)以空格隔開的整數,輸出每行中全部整數之和。
#include<iostream> #include<string> #include<sstream> using namespace std; int main() { string line; while(getline(cin, line)) { int sum = 0, x; stringstream ss(line); while(ss >> x) sum += x; cout << sum << "\n"; } return 0; }
每行中全部整數之和。
string類在string頭文件中,而stringstream在sstream頭文件中。首先用getline函數讀一行數 據(至關於C語言中的fgets,但因爲使用string類,無須指定字符串的最大長度),而後用這 一行建立一個「字符串流」——ss。接下來只需像讀取cin那樣讀取ss便可。
雖然string和sstream都很方便,但string很慢,sstream更慢,應謹慎使用