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

C++的輸入和輸出流詳解

 更新時(shí)間:2022年03月01日 11:31:19   作者:是小明同學(xué)啊  
這篇文章主要為大家詳細(xì)介紹了C++的輸入和輸出流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

輸入和輸出流

從鍵盤輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出稱為標(biāo)準(zhǔn)的輸入輸出,簡稱標(biāo)準(zhǔn)I/O。

從磁盤文件輸入數(shù)據(jù),數(shù)據(jù)輸出到磁盤文件簡稱文件I/O。

對內(nèi)存中指定的空間進(jìn)行輸入輸出,通常指定一個(gè)字符數(shù)組作為存儲空間(存儲任何信息),稱為字符串輸入輸出,簡稱為串I/O

img

緩沖區(qū):無論是輸入還是輸出都是存在緩存區(qū)的。

標(biāo)準(zhǔn)輸入流

常用的成員函數(shù)

1,cin.get()獲取一個(gè)字符

char c = cin.get();

使用cin.get()可以家當(dāng)緩沖區(qū)中的換行符拿走。注意返回值是什么類型的,拿走的數(shù)據(jù)再輸出的時(shí)候就是什么類型。

2,cin.get(兩個(gè)參數(shù))獲取字符串

參數(shù)是字符串?dāng)?shù)組名和個(gè)數(shù)

使用cin.get(兩個(gè)參數(shù))那字符串的時(shí)候,換行符\0會遺留在緩沖區(qū)中。

char buf[100] = {0};
cin.get(buf, 100);
cout << buf<< endl;

只滿足字符數(shù)組,且輸出的字符個(gè)數(shù)總比第二個(gè)參數(shù)少1.(原因:字符數(shù)組最后一個(gè)字符是不可見字符’\0’)

3,cin.getline()獲取字符串

接收一個(gè)字符串并輸出

和cin.get(兩個(gè)參數(shù))相似,不會將換行符加入字符串,但是也不會留在緩沖區(qū)中,而是直接扔掉。

char buf[100] = {0};
cin.getline(buf, 100);
cout << buf << endl;

可以有第三個(gè)參數(shù),就是終止位置(一個(gè)字符,不包括這個(gè)字符)

4,cin.ignore()忽略一個(gè)字符

括號中可以填入?yún)?shù),參數(shù)就是忽略字符的個(gè)數(shù)。默認(rèn)是一個(gè)。

cin.ignore();
char c = cin.get();//ab
cout << c << endl;//b,將a忽略了

5,cin.peak()偷窺

char c = cin.peek();
cout << c << endl;//a
char m = cin.get();
cout << m << endl;//a

緩沖區(qū)中,輸入了一個(gè)a,然后cin.peek()只是看了一眼,并沒有拿走,所以調(diào)用cin.get()的時(shí)候可以直接從緩沖區(qū)中拿。

6,cin.putback()放回(原來的位置)

char c = cin.get();
cin.putback(c);//將從緩沖區(qū)拿走的字符返回原位置
char buf[100] = { 0 };
cin.getline(buf, 100);//接收的是緩沖區(qū)中的字符串,輸出的對象是buf這個(gè)字符數(shù)組。 
cout << buf << endl;

輸入hello,輸出仍是hello。

小案例

案例一:判斷輸入的內(nèi)容是字符串還是數(shù)字(不存在混合的情況)

int main()
{
	cout << "請輸入一個(gè)數(shù)字或者一個(gè)字符串" << endl;
	char c = cin.peek();
	if (c >= '0' && c <= '9')
	{
		cout << "數(shù)字" << endl;
		int num;
		cin >> num;
		cout << num << endl;
	}
	else
	{
		cout << "字符串" << endl;
		char buf[100] = { 0 };
		cin >> buf;
		cout << buf << endl;
	}
	return 0;
}

案例二:

用戶輸入0-10之間的數(shù)字,如果輸入有誤,重新輸入。

int main()
{
	cout << "請輸入一個(gè)0-10之間的數(shù)字" << endl;

	while(true)
	{
		int num;
		cin >> num;
		if (num >= 0 && num <= 10)
		{
			cout << "輸入正確,輸入的值為: " << num << endl;
			break;
		}
		else
		{
			cout << "輸入有誤,請重新輸入" << endl;
		}
	}
	return 0;
}

如果輸入的是一個(gè)數(shù)字,那么一切正常。但是如果輸入字符,那么就是陷入死循環(huán)。這個(gè)時(shí)候就是緩存區(qū)出現(xiàn)了問題。

所以,如果沒有輸入正確,那么可以進(jìn)行清空緩存區(qū)和重置標(biāo)志位。(這個(gè)標(biāo)志位如果是0表示緩沖區(qū)正常,1就是不正常)

cin.clear();//清空緩沖區(qū)
cin.sync();//重置標(biāo)志位
cin.ignore();//幫助清空2013版本以上需要加。
//上面三句話連著使用。
cin.fail();//標(biāo)志位

標(biāo)準(zhǔn)輸出流

1,cout.put(),向緩沖區(qū)寫一個(gè)字符

括號里面是啥,就打印啥。

可以拼接使用:cout.put(‘h’).cout.put(‘a’);//打印結(jié)果就是:ha

2,cout.write(兩個(gè)參數(shù)),

兩個(gè)參數(shù)是char* ,和 對應(yīng)字符串的長度(不能超過最大長度)。從字符串中拿走規(guī)定長度的內(nèi)容輸出。

char arr[] = "hello";
cout.write(arr, strlen(arr));//hello

但是如果要全部打印的話,直接使用cout<<arr<<endl;也是可以的。優(yōu)點(diǎn)應(yīng)該是可以打印規(guī)定長度的字符串。

格式化輸出:

(1) 通過流成員函數(shù) 格式化輸出

int main()
{
	int num = 99;
	cout.width(5);//指定寬度為20(向前面加空格),結(jié)果:   99
	cout.fill('*');//空格處都填充上*,結(jié)果:***99,(填充內(nèi)容會被下一此的填充內(nèi)容覆蓋)
	cout.setf(ios::left);//輸出的文本左對齊,結(jié)果99***
    cout.unsetf(ios::dec);//卸載十進(jìn)制
	cout.setf(ios::hex);//安裝十六進(jìn)制,結(jié)果為63***
	cout.setf(ios::showbase);//顯示基數(shù),結(jié)果0x63*。輸出對應(yīng)進(jìn)制的基數(shù),16進(jìn)制就是0x
	cout.unsetf(ios::hex);//卸載十六進(jìn)制
	cout.setf(ios::oct);//安裝八進(jìn)制,結(jié)果為0143*。
	cout << num << endl;
	return 0;
}	

(2) 使用控制符 格式化輸出

如果使用控制符格式化輸出的話,需要引用頭文件

#include<iomanip>

指定寬度:

    int number = 110;
	cout << setw(20)//指定寬度為20,然后默認(rèn)將數(shù)據(jù)右對齊
		<< number
		<< endl;
	//運(yùn)行結(jié)果:                 110

填充:

    int number = 110;
	cout << setw(20)
		<< setfill('*')//填充,位置在前在后無所謂
		<< number
		<< endl;
	//運(yùn)行結(jié)果:*****************110

顯示基數(shù):

int number = 110;
	cout << setw(20)
		<< number
		<< setfill('*')
		<< setiosflags(ios::showbase)//顯示基數(shù)
		<< endl;	
	//運(yùn)行結(jié)果:*****************110,和上面的沒有區(qū)別,因?yàn)槭M(jìn)制是沒有基數(shù)的。

設(shè)置左對齊:

	int number = 110;
	cout << setw(20)
		<< setfill('*')
		<< setiosflags(ios::showbase)
		<< setiosflags(ios::left)//設(shè)置左對齊
		<< number
		<< endl;	
	//運(yùn)行結(jié)果:110*****************
//這個(gè)時(shí)候需要注意一下,如果按照剛才將number寫在前面的時(shí)候是得不到想要的結(jié)果的,所以應(yīng)該將最終要輸出的內(nèi)容盡量寫在右邊。

顯示十六進(jìn)制:

	int number = 110;
	cout << setw(20)
		<< setfill('*')
		<< setiosflags(ios::showbase)
		<< setiosflags(ios::left)
		<< hex//顯示16進(jìn)制
		<< number
		<< endl;	
	//運(yùn)行結(jié)果:0x6e****************

文件讀寫

寫文件:

需要引頭文件:#include<fstream>(文件流)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • Qt實(shí)現(xiàn)文件的壓縮和解壓縮操作

    Qt實(shí)現(xiàn)文件的壓縮和解壓縮操作

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt庫中的QZipReader和QZipWriter實(shí)現(xiàn)文件的壓縮和解壓縮功能,文中的示例代碼簡潔易懂,需要的可以參考一下
    2024-12-12
  • 解讀C++中枚舉(enum)的使用

    解讀C++中枚舉(enum)的使用

    對于開發(fā)C++來說,枚舉是一個(gè)幾乎必然用到的功能。當(dāng)然今天要講的枚舉肯定不是平常漫不經(jīng)心的使用,而是從里到外地深扒它。本文就來逐漸揭開它神秘地面紗,發(fā)現(xiàn)一些未曾注意到的東西吧
    2023-03-03
  • C++string底層框架模擬實(shí)現(xiàn)代碼

    C++string底層框架模擬實(shí)現(xiàn)代碼

    本節(jié)文章主要說明淺拷貝和深拷貝的優(yōu)缺點(diǎn),以及仿寫string類的邏輯并分析實(shí)現(xiàn)過程,對C++string底層框架模擬實(shí)現(xiàn)代碼感興趣的朋友一起看看吧
    2021-11-11
  • C語言版三子棋游戲

    C語言版三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言版三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言main函數(shù)的參數(shù)及其返回值詳細(xì)解析

    C語言main函數(shù)的參數(shù)及其返回值詳細(xì)解析

    main函數(shù)的返回值用于說明程序的退出狀態(tài)。如果返回0,則代表程序正常退出;返回其它數(shù)字的含義則由系統(tǒng)決定。通常,返回非零代表程序異常退出
    2013-10-10
  • C++設(shè)計(jì)與聲明超詳細(xì)講解

    C++設(shè)計(jì)與聲明超詳細(xì)講解

    C++軟件開發(fā)可以理解為設(shè)計(jì)一系列的類,讓這些類相互使用,最終實(shí)現(xiàn)我們所需要的功能。類與類之間的相互關(guān)系可以很復(fù)雜,也可以很簡單,如何簡單高效的描述類與類之間的關(guān)系是設(shè)計(jì)的難點(diǎn)之一。遵循本文所提供的方法,將會給你一些靈感
    2022-09-09
  • C++中內(nèi)存池的簡單原理及實(shí)現(xiàn)詳解

    C++中內(nèi)存池的簡單原理及實(shí)現(xiàn)詳解

    內(nèi)存池的思想是,在真正使用內(nèi)存之前,預(yù)先申請分配一定數(shù)量、大小預(yù)設(shè)的內(nèi)存塊留作備用。本文主要來和大家聊聊內(nèi)存池的簡單原理及實(shí)現(xiàn),希望對大家有所幫助
    2023-03-03
  • C++?string如何獲取文件路徑文件名、文件路徑、文件后綴(兩種方式)

    C++?string如何獲取文件路徑文件名、文件路徑、文件后綴(兩種方式)

    這篇文章主要介紹了C++?string如何獲取文件路徑文件名、文件路徑、文件后綴(兩種方式),具有很好的參考價(jià)值,希望對大家有所幫助。
    2023-06-06
  • c++非變易算法-stl算法

    c++非變易算法-stl算法

    本文主要介紹了C++ STL算法庫中的非變易算法,是一些原則上不會變更操作數(shù)據(jù)的算法,包括:逐個(gè)查找算法、元素搜索算法、元素統(tǒng)計(jì)算法、序列匹配算法、子序列搜索算法、這些函數(shù)均包含于<algorithm>頭文件,本文給出的所有代碼在VS2010中編譯運(yùn)行通過
    2014-03-03
  • Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測

    Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測

    這篇文章主要為大家詳細(xì)介紹了Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評論

定南县| 平武县| 新巴尔虎右旗| 株洲市| 分宜县| 新邵县| 彭阳县| 沐川县| 绵竹市| 吐鲁番市| 葵青区| 东宁县| 大悟县| 伊通| 阿克| 宜丰县| 津市市| 泰州市| 武安市| 晋江市| 屯门区| 星子县| 奇台县| 舟山市| 岑巩县| 东山县| 永胜县| 古丈县| 大同县| 台州市| 汉寿县| 东莞市| 宝鸡市| 周宁县| 大悟县| 白沙| 伊川县| 克拉玛依市| 阜新市| 雷波县| 隆昌县|