網(wǎng)站主辦單位負(fù)責(zé)人最近國際新聞
讀取數(shù)量不定的輸入數(shù)據(jù)
似乎是一個(gè)很實(shí)用的東西?
問題:
我們?nèi)绾螌?duì)用戶輸入的一組數(shù)(事先不知道具體有多少個(gè)數(shù))求和?
這需要不斷讀取數(shù)據(jù)直至沒有新的輸入為止。(所以我們的代碼就是這樣設(shè)計(jì)的,讓它能一直讀取數(shù)據(jù)直到?jīng)]有新輸入,再求和)
代碼參考:
#include<iostream>int main()
{int sum = 0, value = 0;while (std::cin >> value)sum+=value;std::cout << sum << std::endl;return 0;
}
我們只用一個(gè)while(std::cin>>value)
就解決了這個(gè)問題。
解釋:
輸入運(yùn)算符>>,接受一個(gè)istream作為其左側(cè)運(yùn)算對(duì)象,接受一個(gè)對(duì)象作為其右側(cè)運(yùn)算對(duì)象。
它從給定的istream讀入數(shù)據(jù),并存入給定對(duì)象中
它將返回其左側(cè)運(yùn)算對(duì)象作為其計(jì)算結(jié)果。
也就是說std::cin>>value
返回的是std::cin
。
(重點(diǎn):)當(dāng)使用一個(gè)istream對(duì)象作為條件時(shí),其效果是檢測(cè)流的狀態(tài)。
如果流是有效的,即流未遇到錯(cuò)誤,那么檢測(cè)成功。當(dāng)遇到文件結(jié)束符(end-of-file),或遇到一個(gè)無效輸入時(shí)(例如讀入的值不是一個(gè)整數(shù)),istream對(duì)象的狀態(tài)會(huì)變?yōu)闊o效。處于無效狀態(tài)的istream對(duì)象會(huì)使條件變?yōu)榧佟?/p>
因此,我們的while循環(huán)會(huì)一直執(zhí)行直至遇到文件結(jié)束符(或輸入錯(cuò)誤)。
從鍵盤輸入文件結(jié)束符
那么,我們?cè)鯓硬拍苓_(dá)到輸入停止的效果呢?這當(dāng)然也很重要。
當(dāng)從鍵盤向程序輸入數(shù)據(jù)時(shí),對(duì)于如何指出文件結(jié)束,不同操作系統(tǒng)有不同的約定。
在Windows系統(tǒng)中,輸入文件結(jié)束符的方法是Ctrl+Z(按住Ctrl的同時(shí)按Z鍵),然后按Enter。
在UNIX系統(tǒng)中,包括Mac OS X系統(tǒng)中,文件結(jié)束符輸入是用Ctrl+D。
這只是一個(gè)簡單的例子,這種讀取數(shù)量不定的輸入數(shù)據(jù)的方式可以用在更復(fù)雜的程序中,很有用。