第1章-開始
cin的緩衝區
std::cin >> v1;
輸入6<Enter>
,其中空格、回車、TAB等被認爲是結束條件,“結束”是指從緩衝區刷新到內存,也就是交給程序去執行,cin會識別這些標誌,然後丟掉它們。
比如輸入6 7<Enter>
,因爲6後面有空格,所以6會被從緩衝區刷新到程序,賦給v1,而7會被留在緩衝區,等待下次調用cin時,cin查看到緩衝區有數據,就不會從外界輸入,而是直接從緩衝區讀取7,見下面這個例子。
std::cin >> v1 >> v2;
輸入6 7
時,6被賦給了v1,7被賦給了v2。這個代碼等價於(std::cin >> v1) >> v2;
或者std::cin >> v1; std::cin >> v2;
因爲緩衝區還有7 (Enter)
,cin就會直接讀取,故v2爲7。
文件結束符
UNIX和Mac下鍵盤輸入文件結束符(EOF):ctrl+d
,Windows下:ctrl+z
。有關這個的使用,可以見下面例子:
int sum = 0, value = 0;
while (std::cin >> value)
sum += value;
std::cout << "Sum is: " << sum << std::endl;
輸入3 4 5 6 (ctrl+d)
,然後回車;程序輸出Sum is: 18
。第2行的while
循環條件的false條件爲EOF,像Enter等因爲是緩存區刷新標誌,而且cin會自動忽略這些標誌,不做處理,所以不會使while判斷語句爲false。
除了EOF,也可以輸入一個無效的輸入,比如要求輸入int,可以輸入個字符,就會自動判定爲結束。
文件重定向
比如已經編譯結束gcc test.cpp -o test
生成test
執行文件,我們不光可以從鍵盤上輸入數據,也可以從文件中輸入,將結果保存到文件中。test < inputfile > outputfile
循環
for循環也可以這樣寫:
for(Sales_item item; cin >> item; cout << item << endl) {
sum_item += item;
}
其中cin >> item
作爲判斷條件,當輸入EOF或無效字符時爲false,循環結束。而第3部分也可以不對變量做操作,如i++
等,而只是打印輸出等顯示語句。