特定の形式の入力と出力にストリームを使用する

入力と出力にストリームを使用する

一般的に使用されるフロー制御シンボル

std :: coutを使用して、指定した形式でコンソールにデータを書き込みます

// 使用流进行输入输出.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。  
//  
  
#include <iostream>  
#include <iomanip>  
using namespace std;  
  
int main()  
{  
    // 指定数据输出格式  
    double var1 = 3.1415926;  
    cout << fixed << var1 << endl; // 将默认输出方式设置为定点方式显示  
    cout << scientific << var1 << endl; // 将默认输出方式设置为以科学计数法的方式标准  
    int var2 = 36;  
    cout << hex << var2 << endl; //将默认输出方式设置为以十六进制的方式显示,但是不同于iomanip中的hex显示,这里仅仅可以正常显示整型变量  
    cout << hex << (float)var2 << endl;  
  
    // ios_base::showbase:显示底数,例如0x(16进制)  
    // ios_base::uppercase:字母大写显示  
    // ios_base::hex:16进制显示  
    cout << setiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 设置输出模式  
    cout << var2 << endl;  
    cout << resetiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 将这些输出的规定取消  
    cout << var2 << endl;  
    cout << setprecision(5) << var1 << endl; // 将默认输出方式设置为设置精度为5(小数部分为5位)  
}  

 

std :: coutを使用して、テキストを揃え、フィールド幅を設定します

// 使用流进行输入输出.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。  
//  
  
#include <iostream>  
#include <iomanip>  
using namespace std;  
  
int main()  
{  
    // 指定数据输出格式  
    double var1 = 3.1415926;  
    cout << fixed << var1 << endl; // 将默认输出方式设置为定点方式显示  
    cout << scientific << var1 << endl; // 将默认输出方式设置为以科学计数法的方式标准  
    int var2 = 36;  
    cout << hex << var2 << endl; //将默认输出方式设置为以十六进制的方式显示,但是不同于iomanip中的hex显示,这里仅仅可以正常显示整型变量  
    cout << hex << (float)var2 << endl;  
  
    // ios_base::showbase:显示底数,例如0x(16进制)  
    // ios_base::uppercase:字母大写显示  
    // ios_base::hex:16进制显示  
    cout << setiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 设置输出模式  
    cout << var2 << endl;  
    cout << resetiosflags(ios_base::hex | ios_base::showbase | ios_base::uppercase); // 将这些输出的规定取消  
    cout << var2 << endl;  
    cout << setprecision(5) << var1 << endl; // 将默认输出方式设置为设置精度为5(小数部分为5位)  
  
    // 设置数据的输出排列方式  
    cout << setw(10) << setfill('*');  
    cout << var2 << endl; // 默认右对齐  
    cout << setw(10) << setfill('*');  
    cout << setiosflags(ios_base::left); // 设置左对齐  
    cout << var2 << endl;  
    cout << setw(10) << setfill('*');  
    cout << setiosflags(ios_base::right); // 设置右对齐  
    cout << var2 << endl;  
}  

 

Getlineの使い方

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
        // 数据的读取  
    char name[8] = { 0 };  
    cin >> name;  
    cout << name << endl;  
  
    string mark;  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
}  

 

Cin.getine()とgetline()の違い

定義の違い

Getline(istreamオブジェクト、文字列タイプのInputVar、終了文字の読み取り)

Cin.getline(配列タイプのInputVar、読み取られた文字数( '\ 0'を含む))

操作上の違い

Getline()は非常に使いやすいですが、すべての読み取り要素は1行以内である必要があります。つまり、新しい行の文字「\ n」は、読み取るバッファーでは許可されていません。cin.getline()は使いにくいです。 、名前文字配列に8文字を読み取りたいとすると、cin.getline()は8番目の文字位置に「\ 0」を挿入するため、最初の7文字のみを読み取り、名前文字に割り当てることができます。配列、最終名の文字配列には7つの有効な要素しかありません。

セキュリティの違い

cin.getline()は使いやすいものではありませんが、7番目の要素の後に「\ 0」の読み取り終了マークが挿入されるため、非常に安全だと思います。入力する要素の数に関係なく、cin.getline()のみ最初の7つの要素が読み取られ、メモリの問題は発生しません。

場所の違い

花嫁へ()

文字列クラスのメンバー関数

Cin.getline()

istreamクラスのメンバー関数

C in.getine()の使用法

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
    // 数据的读取  
    char name[8] = { 0 };  
    cin.getline(name, 8); // 读取前7个字符与最后一个结束字符'\0'构成8个字符但是只将前7个字符赋给name,'\0'留在缓存区内  
    cout << name << endl;  
    cin.clear(); // 清空开头到'\0'的输入缓存区  
  
    string mark;  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
}  

 

注:必ず「cin.clear(); // 入力バッファーを最初から「\ 0」まで空にしください」を追加してください。 この方法でのみ、バッファーの最初の「\ 0」読み取りターミネーターをクリアできます。

Getline()の利点

Getline()は、読み取りが完了した後、バッファーにシンボルを埋め込みません。また、バッファーの内容を継続的に読み取ることができます。

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
    string mark;  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
  
    getline(cin, mark, '8'); // 从缓存区的初始位置读取到这一行的'8'结束  
    if (mark == "\0")  
    {  
        cout << "缓存区读取失败" << endl;  
    }  
    cout << mark << endl;  
}  

 

Cin.get()関数の使用法

#include <iostream>  
#include <iomanip>  
#include <string>  
using namespace std;  
  
int main()  
{  
    char weight[10] = { 0 };  
    cin.get(weight, 8); // 在缓冲区内读取7个字符与'\0'一起插入weight中  
    cout << weight << endl;  
    cin.get(weight, 8); // 在缓冲区内读取7个字符与'\0'一起插入weight中   
    cout << weight << endl;  
}  

 

cin.get()とcin.getline()を比較できます。どちらもn-1データを読み取りますが、要素「\ 0」は別の位置に挿入され、cin.get()は「\ 0」になります。 'cin.getline()が' \ 0 '要素をバッファに挿入している間に変数を挿入するため、2つは異なります。

Cin.get()とcin.getline()の使用法の違い

異なる読み取り形式

cin.getline()は、ブランクを含むユーザー入力の行全体を確実にキャプチャします。cin.get()にブランクを含めることはできません。

さまざまな読み取り方法

Cin.getline(配列タイプのInputVar、読み取られた文字数( '\ 0'を含む))

cin.get(istreamオブジェクト、文字数を読み取る)

おすすめ

転載: blog.csdn.net/weixin_45590473/article/details/108273100