最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年07月25日 11:28:19   作者:code的魅力  
這篇文章主要介紹了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對象,當一個cin對象作為條件選擇、循環(huán)等的控制表達式時,編譯器會將其轉(zhuǎn)換為真值表達式,如果cin的iostate為goodbit,則這個真值表達式的結(jié)果為真,否則為假。

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

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

scanf和cin的返回值問題

scanf

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

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

cin

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

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

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

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

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

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

添加重載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;
}

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

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

小結(jié)一下

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

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

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

相關(guān)文章

  • 深入C++拷貝構(gòu)造函數(shù)的總結(jié)詳解

    深入C++拷貝構(gòu)造函數(shù)的總結(jié)詳解

    本篇文章是對C++中拷貝構(gòu)造函數(shù)進行了總結(jié)與介紹。需要的朋友參考下
    2013-05-05
  • C++詳細分析引用的使用及其底層原理

    C++詳細分析引用的使用及其底層原理

    引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識點,需要的朋友可以參考下
    2022-04-04
  • c++ 網(wǎng)絡庫asio的優(yōu)勢

    c++ 網(wǎng)絡庫asio的優(yōu)勢

    這篇文章主要介紹了c++ 網(wǎng)絡庫asio的優(yōu)勢,幫助大家更好的利用c++開發(fā)服務端程序,感興趣的朋友可以了解下
    2020-10-10
  • 基于Qml實現(xiàn)水印工具

    基于Qml實現(xiàn)水印工具

    這篇文章主要介紹了如何在?Qml?中實現(xiàn)一個簡單但功能強大的水印工具,包括水印文本的透明度、顏色、字體大小、旋轉(zhuǎn)角度等自定義功能,需要的可以參考下
    2024-12-12
  • 深入解析C++編程中的靜態(tài)成員函數(shù)

    深入解析C++編程中的靜態(tài)成員函數(shù)

    這篇文章主要介紹了深入解析C++編程中的靜態(tài)成員函數(shù),是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • C語言實現(xiàn)opencv提取直線、輪廓及ROI實例詳解

    C語言實現(xiàn)opencv提取直線、輪廓及ROI實例詳解

    這篇文章主要介紹了C語言實現(xiàn)opencv提取直線、輪廓及ROI實例詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • C++實現(xiàn)字符串轉(zhuǎn)整數(shù)(atoi)的代碼詳解

    C++實現(xiàn)字符串轉(zhuǎn)整數(shù)(atoi)的代碼詳解

    在編程中,經(jīng)常會遇到將字符串轉(zhuǎn)換為整數(shù)的需求,就像標準庫中的 atoi 函數(shù)一樣,本文給大家介紹了C++中字符串轉(zhuǎn)整數(shù)(atoi)的實現(xiàn)與解析,并有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2025-04-04
  • c++多線程為何要使用條件變量詳解

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

    多線程是多任務處理的一種特殊形式,下面這篇文章主要給大家介紹了關(guān)于c++多線程為何要使用條件變量的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)

    C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 深入理解C++ 空類大小

    深入理解C++ 空類大小

    本文主要介紹了C++ 空類大小,規(guī)定空類大小為1字節(jié),主要是為了保證對象的唯一性和可區(qū)分性,滿足數(shù)組元素地址連續(xù)的要求,下面就來了解一下
    2025-01-01

最新評論

文昌市| 全州县| 龙泉市| 清涧县| 油尖旺区| 京山县| 得荣县| 闽清县| 永宁县| 佛山市| 五原县| 莱州市| 龙里县| 阿拉善盟| 固原市| 仙居县| 木兰县| 彰化县| 怀化市| 家居| 曲沃县| 永丰县| 北川| 米林县| 阳东县| 汉川市| 阜宁县| 临城县| 明溪县| 花莲县| 新巴尔虎左旗| 平顺县| 称多县| 鹤壁市| 柞水县| 类乌齐县| 临武县| 潜江市| 静安区| 仲巴县| 安新县|