欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中cin>>n的返回值

 更新時(shí)間:2022年07月25日 11:28:19   作者:code的魅力  
這篇文章主要介紹了C++中cin>>n的返回值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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é)果,這個(gè)判斷條件必須在客戶想要結(jié)束程序的時(shí)候結(jié)束輸入,要怎么做呢?如果輸入一個(gè)錯(cuò)誤的類(lèi)型,cin會(huì)失效,循環(huán)也會(huì)停止,但是這樣做畢竟是個(gè)錯(cuò)誤,那么究竟要怎樣做才能正常結(jié)束這個(gè)循環(huán)呢?

【注意】

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

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

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

scanf和cin的返回值問(wèn)題

scanf

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

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

cin

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

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

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

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ahJpo6qF-1655438506866)(../img/image-20220617114231728.png)]

那么既然返回值是一個(gè)istream&類(lèi)型,那么這個(gè)類(lèi)型的對(duì)象怎么作為條件邏輯判斷的呢?

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

則下面兩段代碼等價(jià):

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

如果某個(gè)類(lèi)型沒(méi)有重載bool操作符,那么它就不能用于條件邏輯判斷;

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

添加重載bool操作符;

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

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

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

小結(jié)一下

1**.scanf是一個(gè)函數(shù)**,返回值為一個(gè)int,代表scanf讀入對(duì)象的個(gè)數(shù),如果其讀到EOF結(jié)束標(biāo)志,會(huì)返回0相當(dāng)于false;

2.cin是一個(gè)istream類(lèi)型對(duì)象,他能作為判斷語(yǔ)句的原因是istream類(lèi)型中的>>操作符會(huì)返回一個(gè)istream對(duì)象(cin),如果>>讀到EOF那么返回的istream對(duì)象(cin)中會(huì)檢測(cè)到EOF的存在,那么istream類(lèi)型的operator bool()轉(zhuǎn)換函數(shù)起作用將這個(gè)對(duì)象(cin)轉(zhuǎn)換成bool類(lèi)型false作為條件判斷;

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記

    C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記

    這篇文章主要介紹了C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記,包括指針訪問(wèn)數(shù)組等重要知識(shí)點(diǎn),需要的朋友可以參考下
    2016-05-05
  • 使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例

    使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例

    這篇文章主要為大家介紹了使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • c++多線程為何要使用條件變量詳解

    c++多線程為何要使用條件變量詳解

    多線程是多任務(wù)處理的一種特殊形式,下面這篇文章主要給大家介紹了關(guān)于c++多線程為何要使用條件變量的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C語(yǔ)言基礎(chǔ) strlen 函數(shù)

    C語(yǔ)言基礎(chǔ) strlen 函數(shù)

    這篇文章主要介紹了C語(yǔ)言基礎(chǔ) strlen 函數(shù),在C 語(yǔ)言中,char 字符串也是一種非常重要的數(shù)據(jù)類(lèi)型,我們可以使用 strlen 函數(shù)獲取字符串長(zhǎng)度,這就是C語(yǔ)言strlen 函數(shù)的作用,下面我們來(lái)簡(jiǎn)單介紹該內(nèi)容,需要的朋友可以參考以下
    2021-10-10
  • 解析C++中的for循環(huán)以及基于范圍的for語(yǔ)句使用

    解析C++中的for循環(huán)以及基于范圍的for語(yǔ)句使用

    這篇文章主要介紹了解析C++中的for循環(huán)以及基于范圍的for語(yǔ)句使用,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • 詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

    詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

    這篇文章主要為大家詳細(xì)介紹了c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C語(yǔ)言拓展實(shí)現(xiàn)Lua sleep函數(shù)

    C語(yǔ)言拓展實(shí)現(xiàn)Lua sleep函數(shù)

    這篇文章主要介紹了C語(yǔ)言拓展實(shí)現(xiàn)Lua sleep函數(shù),本文使用C語(yǔ)言寫(xiě)出sleep函數(shù),編譯后在Lua中調(diào)用,需要的朋友可以參考下
    2015-04-04
  • C++中構(gòu)造函數(shù)的參數(shù)缺省的詳解

    C++中構(gòu)造函數(shù)的參數(shù)缺省的詳解

    這篇文章主要介紹了C++中構(gòu)造函數(shù)的參數(shù)缺省的詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • C++判斷矩形相交的方法

    C++判斷矩形相交的方法

    這篇文章主要介紹了C++判斷矩形相交的方法,涉及C++針對(duì)平面坐標(biāo)數(shù)學(xué)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C/C++中如何判斷某一文件或目錄是否存在

    C/C++中如何判斷某一文件或目錄是否存在

    以下文章是對(duì)C/C++中判斷某一文件或目錄是否存在的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07

最新評(píng)論