程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 不可或缺 Windows Native (13),native13

不可或缺 Windows Native (13),native13

編輯:C++入門知識

不可或缺 Windows Native (13),native13


[源碼下載]


不可或缺 Windows Native (13) - C++: 標准輸入, 標准輸出



作者:webabcd


介紹
不可或缺 Windows Native 之 C++

  • 標准輸入
  • 標准輸出



示例
CppIO1.h

#pragma once 

#include <string>

using namespace std;

namespace NativeDll
{
    class CppIO1
    {
    public:
        string Demo();
    };
}


CppIO1.cpp

/*
 * 標准輸入,標准輸出
 *
 * 對系統指定的標准設備的輸入和輸出(即從鍵盤輸入數據,從顯示器輸出數據),這種輸入輸出稱為標准的輸入輸出,簡稱標准 I/O
 */

#include "pch.h" 
#include "CppIO1.h" 

#include <iostream> // 標准輸入輸出的類
#include <iomanip> // io manipulator

using namespace NativeDll;

void cppio1_demo1();
void cppio1_demo2();
void cppio1_demo3();
void cppio1_demo4();
void cppio1_demo5();

string CppIO1::Demo()
{
    // cin 和 cout 的基本用法
    // cppio1_demo1();

    // 通過 cout 格式化輸出
    // cppio1_demo2();

    // cout.put(), cin.get(), cin.getline()
    // cppio1_demo3();

    // cerr, clog
    // cppio1_demo4();

    // cin.ignore(), cin.putback()
    // cppio1_demo5();


    return "看代碼及注釋吧";
}



// cin 和 cout 的基本用法
void cppio1_demo1()
{
    // cin(console input) - 其是類型為 istream 的對象
    // cout(console output) - 其是類型為 ostream 的對象

    int a, b;
    // 輸入
    std::cin >> a >> b;

    // 輸出
    std::cout << a << b << "\n"; // 遇到"\n"則會把cout緩沖區中的數據輸出出來
    std::cout << a << b << std::endl; // endl(end of line) - 輸出"\n", 然後 flush 緩沖區

    std::cout << a;
    std::cout.flush(); // 調用 flush 也會把cout緩沖區中的數據輸出出來
}



// 通過 cout 格式化輸出
void cppio1_demo2()
{
    int a = 100;

    // 通過格式標志格式化輸出
    std::cout << std::dec << a << std::endl; // 100 十進制
    std::cout << std::hex << a << std::endl; // 64 十六進制
    std::cout << std::oct << a << std::endl; // 144 八進制
    std::cout << std::showbase << std::uppercase << std::hex << a << std::endl; // 0X64

    /*
     * 格式標志及說明如下:
     *
     * left - 輸出數據在本域寬范圍內向左對齊
     * right - 輸出數據在本域寬范圍內向右對齊
     * internal - 數值的符號位在域寬內左對齊,數值右對齊,中間由填充字符填充
     * dec - 十進制
     * oct - 八進制
     * hex - 十六進制
     * showbase - 強制輸出整數的基數(八進制數以0打頭,十六進制數以0x打頭)
     * showpoint - 強制輸出浮點數的小點和尾數0
     * uppercase - 在以科學記數法格式E和以十六進制輸出字母時以大寫表示
     * showpos - 對正數顯示“+”號
     * scientific - 浮點數以科學記數法格式輸出
     * fixed - 浮點數以定點格式(小數形式)輸出
     * unitbuf - 每次輸出之後刷新所有的流
     */



    float b = 123.14159265f;
    // 通過 cout 的成員函數或控制符(manipulator)格式化輸出
    std::cout.width(10); // 寬度為 10 個字符(僅對其後的第 1 個輸出項有效)
    std::cout.precision(4); // 從第 1 個非 0 值開始,保留 4 位數字
    std::cout << b << b << std::endl; //      123.1123.1
    std::cout << std::setw(10) << b << b << std::endl; //      123.1123.1

    std::cout.setf(std::ios::hex | std::ios::showbase | std::ios::uppercase); // 設置指定的格式標志,用“|”分開
    std::cout << a << std::endl; // 0X64
    std::cout << a << std::endl; // 0X64

    std::cout.unsetf(std::ios::showbase | std::ios::uppercase); // 清除指定的格式標志,用“|”分開
    std::cout << a << std::endl; // 64

    /*
     * 第1列是cout的成員函數;第2列是對應的控制符(要使用控制符,則須包含 iomanip 頭文件);第3列是對應的說明
     * precision(n) setprecision(n) 從第 1 個非 0 值開始,需要輸出的位數(四捨五入)
     * width(n)     setw(n)         輸出的寬度(僅對其後的第 1 個輸出項有效)
     * fill(c)      setfill(c)      填充指定宇符
     * setf()       setiosflags()   設置指定的格式標志
     * unsetf()     resetioflags()  清除指定的格式標志
     */
}



// cout.put(), cin.get(), cin.getline()
void cppio1_demo3()
{
    // cout.put()
    std::cout.put(65); // A
    std::cout.put('A'); // A
    std::cout << std::endl;


    // cin.get()
    char c[100];
    // 以下面這句為例,當程序調用 cin.get() 函數時,程序就等著用戶按鍵,用戶輸入的字符被存放在緩沖區中,直到用戶輸入'\n'為止('\n'也放在緩沖區中)
    // 然後將字符 x 之前的 10-1 個字符賦值給 c,c 的第 10 個字符為字符串的結束標識符'\0'
    // x 以及 x 之後的字符仍然保存在緩沖區中
    std::cin.get(c, 10, 'x'); // 還有幾個重載,看文檔吧
    std::cout << c << std::endl;
    // 輸入:abcxyz\n, c 的值為 abc\0, 緩沖區中的數據為 xyz\n
    // 輸入:abcdefghijklmnopqrstuvwxyz\n, c 的值為 abcdefghi\0, 緩沖區中的數據為 jklmnopqrstuvwxyz\n


    // cin.getline()
    // 其用法同 cin.get(), 但是 cin.getline() 會自動清除緩沖區中的'\n'


    // 注意:每次 cin.get()/cin.getline() 的時候,之前的緩沖區中的數據也仍然有效,可以通過如下方法清除輸入緩沖區
    // std::cin.sync();
}



// cerr, clog
void cppio1_demo4()
{
    // cout, cerr, clog 都是類型 ostream 的對象
    // cerr 是標准錯誤流,只能輸出到顯示器。而 cout 除了輸出到顯示器之外,也可以被重定向輸出到磁盤文件等地方
    // clog 同 cerr,區別是 cerr 不經過緩沖區,而 clog 需要經過緩沖區(cout 也要經過緩沖區)

    std::cerr << "abc";
    std::clog << "abc" << std::endl;
}



// cin.ignore(), cin.putback()
void cppio1_demo5()
{
    char c[100];
    // 跳過輸入流中前 n 個字符,或在遇到指定的終止字符時提前結束(此種場景終止字符也會被跳過)
    std::cin.ignore(3, 'x');
    std::cin >> c;
    // 輸入 abcdefg,則 c 值為 defg\0
    // 輸入 axmn,則 c 值為 mn\0


    char c1;
    char c2[10];
    cin >> c1;
    cin.putback('a'); // 在 cin 緩沖區的當前指針處插入指定的字符,然後指針往前移一個字符
    cin.putback('b');
    cin.putback(c1);
    cin >> c2;
    // 輸入 x,則 c1 的值為 x,c2 的值為 xba\0
}



// 在 linux 系統中,一切設備都看作文件。而每打開一個文件,就有一個代表該打開文件的文件描述符(file descriptor)
// 程序啟動時,默認打開三個 I/O 設備文件:標准輸入文件(stdin),標准輸出文件(stdout),標准錯誤輸出文件(stderr),其對應的文件描述符分別為 0, 1, 2



OK
[源碼下載]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved