中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C++輸入和輸出流的示例分析

發布時間:2022-03-01 14:14:41 來源:億速云 閱讀:132 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關C++輸入和輸出流的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    輸入和輸出流

    從鍵盤輸入數據,輸出到顯示器屏幕。這種輸入輸出稱為標準的輸入輸出,簡稱標準I/O。

    從磁盤文件輸入數據,數據輸出到磁盤文件簡稱文件I/O。

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

    C++輸入和輸出流的示例分析

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

    標準輸入流

    常用的成員函數

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

    char c = cin.get();

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

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

    參數是字符串數組名和個數

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

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

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

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

    接收一個字符串并輸出

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

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

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

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

    括號中可以填入參數,參數就是忽略字符的個數。默認是一個。

    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

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

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

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

    輸入hello,輸出仍是hello。

    小案例

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

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

    案例二:

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

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

    如果輸入的是一個數字,那么一切正常。但是如果輸入字符,那么就是陷入死循環。這個時候就是緩存區出現了問題。

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

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

    標準輸出流

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

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

    可以拼接使用:cout.put(&lsquo;h&rsquo;).cout.put(&lsquo;a&rsquo;);//打印結果就是:ha

    2,cout.write(兩個參數),

    兩個參數是char* ,和 對應字符串的長度(不能超過最大長度)。從字符串中拿走規定長度的內容輸出。

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

    但是如果要全部打印的話,直接使用cout<<arr<<endl;也是可以的。優點應該是可以打印規定長度的字符串。

    格式化輸出:

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

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

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

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

    #include<iomanip>

    指定寬度:

        int number = 110;
    	cout << setw(20)//指定寬度為20,然后默認將數據右對齊
    		<< number
    		<< endl;
    	//運行結果:                 110

    填充:

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

    顯示基數:

    int number = 110;
    	cout << setw(20)
    		<< number
    		<< setfill('*')
    		<< setiosflags(ios::showbase)//顯示基數
    		<< endl;	
    	//運行結果:*****************110,和上面的沒有區別,因為十進制是沒有基數的。

    設置左對齊:

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

    顯示十六進制:

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

    文件讀寫

    寫文件:

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

    感謝各位的閱讀!關于“C++輸入和輸出流的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    c++
    AI

    临清市| 绥芬河市| 云霄县| 宁德市| 江山市| 西藏| 亚东县| 伊川县| 霍林郭勒市| 朝阳县| 甘肃省| 漳州市| 松潘县| 吴江市| 长垣县| 东莞市| 通渭县| 灵武市| 保亭| 辽阳县| 三门县| 汤原县| 临湘市| 台前县| 瑞金市| 霸州市| 襄汾县| 本溪| 龙陵县| 鹤壁市| 朝阳市| 秦皇岛市| 安塞县| 施秉县| 太仓市| 永昌县| 兴义市| 扎鲁特旗| 广汉市| 额尔古纳市| 罗甸县|