第11章C++I/Oシステム


1.ストリーム:データストリーム、またはデータを転送するソフトウェアモジュール
  • ストリームの両端にプログラムとデバイスが接続する、送信順にデータ
  • が送信される.
  • I/O基本単位:バイト
  • タイプ
  • 入力ストリーム:入力デバイス、ネットワーク、およびファイルからプログラムにデータを転送するストリーム
  • .
  • 出力ストリーム:プログラム出力データを出力デバイス、ネットワーク、およびファイルに転送するストリーム
  • .
    2.C++I/Oフローバッファ
    1)キーストリームのバッファ-入力されたデータを入力装置からプログラムに転送する前に一時保存する
  • キーは入力中に変更可能:backspaceキーを入力後、以前に入力したキーをバッファから
  • 削除する.
  • プログラムは、ユーザが秘密鍵を入力した後に読み出す
  • 円トルコ:
  • 入力完了
  • 円を入力と、プログラムはキーバッファから
  • を読み出す.
    2)画面出力ストリームバッファ-プログラム出力データを出力装置に送信する前に一時保存する
  • バッファが満タンまたは強制出力コマンドのとき出力装置
  • に出力.
    3.C++標準はストリームI/Oのみをサポートする
    ストリームI/O:ストリームバッファを使用したI/O
  • 入力された鍵はバッファに格納されます.エンタープライズ鍵が入力された場合、プログラムは
  • でバッファから読み出されます.
  • から出力データは、最初のストリームバッファ->バッファがいっぱい、"n"または強制出力コマンドの下でのみ、出力装置
  • に出力される.
    4.標準I/Oストリームオブジェクト
    C++プログラム実行時に自動生成されるストリーム
  • cin:istreamタイプのストリームオブジェクト、キーボードデバイス
  • に接続
  • cout:ostreamタイプのストリームオブジェクト、スクリーンデバイス
  • に接続
  • cerr:ostreamタイプのストリームオブジェクト.スクリーンデバイスに接続
  • エラーメッセージを出力し、ストリーム内部バッファを必要とせずに
  • を出力する.
  • ブロック:streamタイプのストリームオブジェクトとして、スクリーンデバイスに接続
  • のエラーメッセージを出力するために使用され、ストリームにおいて
  • の出力をバッファリングする.
    5.ostreamメンバー関数
  • ostream&put(charch):chの文字をストリームに出力する
  • stream&write(char*str,int n):str配列のn文字をストリーム
  • に出力する
  • Ostream&flush():現在のストリームバッファ内のコンテンツ強制出力
  • 6.istreamメンバー関数-文字入力、get()関数
  • int get():入力ストリームから文字を読み出して返します.障害またはEOFが発生した場合は、1(EOF)
  • を返します.
  • istream&get(char&ch):入力ストリームから文字を読み出し、chに保存します.現在入力されているストリームオブジェクト(*this)の参照が返されます.障害またはEOFが発生すると、ストリームにエラーフラグ
  • が設定される.
    int ch;
    while((ch = cin.get()) != EOF) { // EOF는 -1
    	cout.put(ch); // 읽은 문자 출력
        if(ch == '\n')
        	break; // <Enter> 키가 입력되면 읽기 중단
    }
    char ch;
    while(true) {
    	cin.get(ch); // 입력된 키를 ch에 저장하여 리턴
        if(cin.eof()) break; // EOF를 만나면 읽기 종료
        cout.put(ch); // ch의 문자 출력
        if(ch == '\n')
        	break; // <Enter> 키가 입력되면 읽기 중단
    }
    7.入力文字列
    istream&get(char*s,int n):入力ストリームからn-1文字を読み出し、配列sに格納し、最後に「0」文字を挿入します.入力中に「n」が発生した場合は、「0」を挿入して戻ります.
    =>入力中にキー("n")に遭遇した場合-読み取りを中断し、文字列をreturn、return()で読もうとすると、入力ストリームの残りの"n"キーが読み込まれ、無限ループ=>cinに陥ります.get()またはcin.ignore(1);ストリームから1文字を読み込む必要があります("n")
    8.1行読む
  • istream&get(char*s,int n,char delim=「n」)-「n」文字バッファに保持される
  • istream&getline(char*s,int n,char delim='n')-get()と同じですが、delimに割り当てられた区切り記号
  • をストリームから削除します.
    9.入力文字をスキップして文字数を見つける
  • istream&ignore(int n=1,int delim=EOF)-入力ストリームからn文字を削除します.途中delim文字に遭遇した場合、delim文字を削除して
  • を返します.
  • int gcount()-入力ストリームから最近読み込まれたバイト数(文字数)を返します.鍵数は
  • を含む
    cin.ignore(10); // 입력 스트림에 입력된 문자 중 10개 제거
    cin.ignore(10, ';'); // 입력 스트림에서 10개의 문자 제거. 제거 도중 ';'를 만나면 종료
    10.フォーマットI/O-フォーマットフラグ、フォーマット関数、オペレータ
  • フォーマットフラグ:I/OストリームでI/Oフォーマットを指定するフラグ
  • フラグ値の意味ios::skipwq 0 x 001入力時にスペース文字(スペース、タブ、開行文字)ios::unitbuf 0 x 002出力ストリーム中のデータをバッファリングせず、ios::高case 0 x 00416進数のA~Fを直接出力する.指数で表されるEを大文字ios::showbase 0 x 00816進数で0 x;出力ios::showpoint 0 x 0100の実数値に対して、8進法であれば数値の前に0を加算します.整数部を除き、小数点以下の端数出力ios::showpos 0 x 020正数の+シンボル出力ios:デバッガ設定ios::oct 0 x 04008進出力ios::hex 0 x 080016進出力ios::科学0 x 1000エラーの場合、科学算術用のルールに従ってios::fixd 0 x 2000エラーを出力し、ios::boolalpha 0 x 4000に設定し、論理値trueを「true」に出力し、falseを「false」に出力し、設定していない場合は整数1と0で出力する
    ▼▼▼フォーマットマークのメンバー関数▼▼
    (1)longsetf(longflags):flagsをストリームのフォーマットフラグに設定し、前のフラグに戻ります.
    (2)long unsetf(longflags):floagsで設定したビット値に基づいてストリームのフォーマットタグを無効にし、前のタグを返す
    =>フォーマットフラグはオンのまま

  • フォーマット関数の使用
    (1)int width(int minwidth):出力フィールドの最小幅をminwidthに設定し、以前に設定した幅値を返す
    (2)char fill(char cfill):フィールド内のスペースをcfill文字で埋め込み、前の文字値を返すように指定します.
    (3)int precision(int np):出力の有効桁数をnp個に設定します.整数部と小数点(.)を含む除外

  • オペレータ-オペレータは常に演算子と組み合わせて使用します.
    (1)無パラメータ操作者
  • オペレータI/O用途すべてのストリームバッファを印刷し、OCTO整数フィールドを次の行に移動し、DECO整数フィールドを8進数ベースで出力し、16進数整数フィールドを10進数ベースで出力し、出力左揃え出力右揃え出力右揃え出力右揃え出力右揃え出力右揃え出力fixedO実数フィールドを固定小数で科学的に計算する使用する出力flushOフローバッファに対してshowbaseO 16進数0 xを強制出力し、8進数0の出力noswowbaseOshowbaseに対してshowpoint O実数値の指定を解除します.整数部と小数点以下の余剰スペースが0の出力を指定解除noswhopointOshowpoint 0のshowposo正の値を指定解除する場合、+番号を付けると、出力skipwsi入力ストリームでスペース文字を読み込まずにnoskipwsiskipwsをスキップして指定したboolalphaoブール値をキャンセルして「true」または「false」文字列に出力します
    (2)パラメータオペレータ
    オペレータI/O用途resetioflags(longflags)IOflagsの場合、指定したタグをsetbase(int base)Obaseから無効にし、指定したsetfill(char cfill)Iフィールドを出力の整数として出力し、残りのスペースにcfill文字で埋め込まれたsetioflags(longflags)IOflagsをストリームI/Oタグ設定setprecision(int np)O出力の有効桁数をnpに設定します.小数点(.)個別のカウント設定Oフィールドの最小幅を最小幅として指定
    11.挿入演算子(<<)-挿入演算子、または挿入演算子/streamクラスの重複
    12.ユーザー挿入演算子の作成=>クラスprivateメンバー変数friendキーが必要
    ostream& operator << (ostream& stream, Point a) {
    	stream << "(" << a.x << "," << a.y << ")";
        return stream;
    }
    13.抽出演算子(>>)-抽出演算子/istreamクラスで繰り返し作成
    14.ユーザー抽出演算子=>クラスprivateメンバー変数を使用する場合はfriendキーを使用する必要があります.
    istream& operator >> (istream& ins, Ponit &a) {
    	cout << "x 좌표>>";
        ins >> a.x;
        cout << "y 좌표>>";
        ins >> a.y;
        return ins;
    }