>n的返回值是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀?..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中cin>>n的返回值是什么

發(fā)布時間:2022-07-28 10:22:43 來源:億速云 閱讀:412 作者:iii 欄目:開發(fā)技術(shù)

這篇“C++中cin>>n的返回值是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++中cin>>n的返回值是什么”文章吧。

cin>>n的返回值

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
 
int main()
{
	int n,temp;
	vector<int> arr;
	while(cin>>n)
	{
		for(int i=0;i<n;i++)
		{
			cin>>temp;
			arr.push_back(temp);
		}
 
		sort(arr.begin(),arr.end());
 
		for(int i=0;i<n;i++)
			cout<<arr[i]<<" ";
		cout<<endl;
 
		system("pause");
		return 0;
 
	}
}

cin>>n作為判斷條件返回的是什么值呢?

如果要輸出正確結(jié)果,這個判斷條件必須在客戶想要結(jié)束程序的時候結(jié)束輸入,要怎么做呢?如果輸入一個錯誤的類型,cin會失效,循環(huán)也會停止,但是這樣做畢竟是個錯誤,那么究竟要怎樣做才能正常結(jié)束這個循環(huán)呢?

【注意】

cin>>n返回的也是一個cin對象,當(dāng)一個cin對象作為條件選擇、循環(huán)等的控制表達(dá)式時,編譯器會將其轉(zhuǎn)換為真值表達(dá)式,如果cin的iostate為goodbit,則這個真值表達(dá)式的結(jié)果為真,否則為假。

輸入一個非數(shù)字可以置位failbit,從而結(jié)束循環(huán),當(dāng)然這是一個非正常退出。

正常退出可以用鍵盤模擬產(chǎn)生EOF,表示流輸入結(jié)束了。在windows中可以輸入ctrl+z,unix/linux中則為ctrl+d。

scanf和cin的返回值問題

scanf

scanf是一個函數(shù),它的返回值是一個int,該int代表scanf成功讀取到數(shù)據(jù)的個數(shù),如果讀到文件末尾或者輸入ctrl+z標(biāo)志讀取完畢的時候就會讀到EOF,這是它會返回0,相當(dāng)于false;

int n;
    while (scanf("%d", &n) != EOF)
    {
        getchar();//吃掉回車
        cout<<n<<endl;
    }

C++中cin>>n的返回值是什么

cin

首先 cin是一個ios(iostream)中的對象,那么他不是函數(shù),不存在什么返回值;

int n;
	while (cin>>n)
	{
		cout << "flag" << endl;
	}

C++中cin>>n的返回值是什么

這段程序看起來好像cin返回了值作為while中的條件判斷,實際上cin是一個對象,無返回值,而這個返回值是std中重載>>這個運(yùn)算符返回的,其類型是一個istream&,這也說明了可以cin>>a>>b這樣連用的場景;

C++中cin>>n的返回值是什么

那么既然返回值是一個istream&類型,那么這個類型的對象怎么作為條件邏輯判斷的呢?

C++中cin>>n的返回值是什么

C++中cin>>n的返回值是什么

istream作為ios繼承的一個類型,其中重載了bool這個操作符別名,使得istream其對象可以調(diào)用bool操作符(相當(dāng)于加了一個本類型與bool類型的轉(zhuǎn)換函數(shù)),該函數(shù)選擇性的返回給條件判斷語句true或者false,比如istream的對象 如果收到EOF(ctrl+z)就會return false,這也說明了while(cin>>n)當(dāng)傳入EOF能停下來的原因;

則下面兩段代碼等價:

int n;
	while (cin>>n)
	{
		cout << "flag" << endl;
	}
	
int n;
	while ((cin>>n).bool())
	{
		cout << "flag" << endl;
	}

如果某個類型沒有重載bool操作符,那么它就不能用于條件邏輯判斷;

class A
{
public:
	int a = 0;
};
int main() {
	A a;
	if (a) cout << 1 << endl;
	else cout << 0 << endl;
	return 0;
}

C++中cin>>n的返回值是什么

添加重載bool操作符;

class A
{
public:
	int a = 0;
	operator bool()//注意 轉(zhuǎn)換函數(shù)比較特殊 無返回值
	{
		if(a==0) return false;
		return true;
	}
};
int main() {
	A a;
	if (a) cout << 1 << endl;
	else cout << 0 << endl;
	return 0;
}

C++中cin>>n的返回值是什么

要注意的是 這里operator bool()相當(dāng)于是一個原生類型與bool類型的轉(zhuǎn)換函數(shù),會返回一個bool值給邏輯表達(dá)式作為判斷,但是重載operator bool()的時候無返回值!這是其特殊的地方!

因此,若想使用自定義類型作為邏輯判斷表達(dá)式的判斷依據(jù),只要在這個類型中設(shè)置轉(zhuǎn)換函數(shù)即重載operator bool()即可。

以上就是關(guān)于“C++中cin>>n的返回值是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI