C++ でのデータ入出力の概要

C++ でのデータ入出力の概要

C++ でのデータの入出力に関連するファイル

<iostream>: これは、C++ 標準ライブラリで最も一般的に使用されるヘッダー ファイルの 1 つで、std::cin、std::cout、std::endl などの標準入出力操作を実行するクラスとオブジェクトが含まれています。等

<iomanip>: このヘッダー ファイルは、std::setprecision、std::setw、std::fixed などの入出力形式を制御するためのいくつかの関数とフロー制御シンボルを提供します。

<fstream>: このヘッダー ファイルはファイルの入出力操作に使用されます。ファイルの読み取りと書き込みのための入力および出力ストリーム クラス (std::ifstream、std::ofstream など) を提供します。

<sstream>: このヘッダー ファイルは、std::istringstream、std::ostringstream などの文字列ストリームのクラスを定義します。データを文字列から他の型に変換したり、他の型のデータを文字列に変換したりする場合に便利です。

<cstdio> または <stdio.h>: これは C 言語のヘッダー ファイルであり、C++ でも使用できます。これは、scanf、printf、fgets、fputs などの C 標準ライブラリに関連するいくつかの入出力関数を提供します。

データの入出力操作を実行するには、実際のニーズに応じて適切なヘッダー ファイルを選択する必要があります。たとえば、標準入出力のみを実行する必要がある場合は、<iostream> のみを含める必要があります。ファイルの読み取りと書き込みが必要な場合は、<fstream> を含める必要があります。文字列ストリーム操作を実行する必要がある場合は、 <sstream> などを含める必要があります。

以下では、いくつかの C++ でのデータの入出力の基本的な方法をいくつか紹介します。

<iostream>ヘッダー ファイルを使用した cinと cout 、 getline関数、および puts関数

Cin および cout: これらは C++ 標準ライブラリによって提供される入力および出力ストリーム オブジェクトであり、標準入力からデータを読み取り、標準出力にデータを書き込むために使用されます。たとえば、整数を読み取るには cin と >> 演算子を使用でき、整数を出力するには cout と << 演算子を使用します。

#include <iostream>

int main() {
    int num;
    std::cout << "请输入一个整数: ";
    std::cin >> num;
    std::cout << "您输入的整数是: " << num << std::endl;

    return 0;
}

上記の例では、std::cin を使用して標準入力から整数を読み取り、std::cout を使用して標準出力に出力します。

getline 関数は、入力ストリームから文字列を 1 行読み取り、指定された変数に保存するために使用されます。Puts 関数は、文字列を標準出力に出力するために使用されます。getline 関数を使用して文字列の行を読み取ることができ、puts 関数を使用して文字列を出力できます。getline 関数は、改行またはファイルの終わり文字 (\n または EOF) が見つかるまで、入力ストリームから文字行を読み取ります。Puts 関数は、自動的に改行が追加された文字列を標準出力に出力します。Puts 関数は C スタイルの文字列のみを出力でき、文字列型の string は C スタイルの文字ポインタに変換する必要があり、文字列の c_str() メソッドを使用できることに注意してください。getline と Puts の 2 つの関数を使用するサンプル コードは次のとおりです。

#include <iostream>

int main() {
    std::string str;
    std::cout << "请输入一行字符串: ";
    std::getline(std::cin, str); // 读入一行字符串
    std::cout << "您输入的字符串是: " << str << std::endl;

    const char* cstr = str.c_str();
    std::puts(cstr); // 输出字符串

    return 0;
}

テスト走行:

この例のコード行「const char* cstr = str.c_str();」の機能は、std::string 型の文字列 str を C スタイルの文字列 (NULL で終わる文字配列) に変換することです。

c_str() 関数を使用する理由 std::puts() 関数で受け入れられるパラメーターは、C++ std::string 型ではなく、C スタイルの文字列 (つまり、null で終わる文字配列) であるためです。したがって、 std::puts() 関数を呼び出す前に、 c_str() 関数を使用して C スタイルの文字列を取得する必要があります。C++ の std::string 型は、文字列データへの定数ポインターを返すメンバー関数 c_str() を提供します。c_str() 関数を呼び出すと、std::string オブジェクトに格納されている文字配列のアドレスを取得できます。

<cstdio> ヘッダー ファイルのgetchar 、 putchar 、 scanf 、 printf関数を使用する

getchar 関数と putchar 関数は、一般的に使用される 2 つの文字入出力関数です。

getchar() 関数は、標準入力ストリーム (通常はキーボード) から 1 文字を読み取るために使用されます。パラメータは必要なく、ユーザーが文字を入力するのを待ってからプログラムの実行を続行します。使用例は次のとおりです。

#include <cstdio>

int main() {
    char c = getchar(); // 从标准输入读取一个字符
    putchar(c); // 将字符输出到标准输出
    return 0;
}

putchar() 関数は、標準出力ストリーム (通常はコンソール) に文字を出力するために使用されます。使用例は次のとおりです。

#include <cstdio>

int main() {
    char c = 'A';
    putchar(c); // 将字符 'A' 输出到屏幕
    return 0;
}

ところで:

getchar() と putchar() は元々 ASCII 文字を処理するように設計されましたが、中国語の文字も処理できます。中国語の文字は通常マルチバイト エンコーディング (UTF-8 など) を使用しますが、どう理解すればよいでしょうか?

 getchar() 関数と putchar() 関数は、基礎となるオペレーティング システムまたはコンパイラによって提供される文字入力および出力関数を通じて実装されているため、中国語の文字を処理できます。基礎となる文字の入出力機能はオペレーティング システムやコンパイラによって異なる場合があり、一部の特殊文字やエンコード方法では問題が発生する可能性があります。したがって、中国語の文字を扱う場合は、<iostream> ヘッダー ファイルで std::cin および std::cout を使用するなど、中国語の文字をサポートするより高度な入出力関数を使用することをお勧めします。

scanf と printf は、C 言語で一般的に使用される入出力関数であり、C++ でも使用できます。scanf は標準入力からデータを読み取るために使用され、printf はデータを標準出力に書き込むために使用されます。C++ で使用する場合は、いくつかの詳細に注意する必要があります。一般に、scanf および printf は、cin および cout と同等に使用できます。たとえば、scanf を使用して整数を読み取り、printf を使用して整数を出力できます。

#include <cstdio>

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num); // 读入一个整数
    printf("您输入的整数是: %d\n", num); // 输出一个整数到标准输出

    return 0;
}

scanf と printf はフォーマット文字列を使用して入力と出力のデータ型を指定する必要があるため、より多くのコードを記述する必要があることに注意してください。同時に、scanf の入力パラメータでは「アドレス記号」& を使用する必要がありますが、printf の出力パラメータでは必要ありません。

Scanf および printf 形式の入出力の概要

printf関数は整形出力用の関数で、整形したデータをコンソールやファイルに出力することができます。基本的な構文は次のとおりです。

printf("フォーマット制御文字列", value1, value2, ...);

このうち、形式制御文字列は、出力するデータの種類や形式を指定するために使用されます。値 1、値 2 などは、出力される変数または定数を表し、複数存在する場合があります。出力の形式を含む形式制御文字列。次の変換文字と対応する形式指定子を使用して、出力の種類を指定できます。

%d: 10 進整数として出力します。

%f: 浮動小数点数の形式で出力します。

%c:文字形式で出力します。

%s: 文字列形式で出力します。

%p: ポインタの形式で出力します。

%x:16進数で出力します。

%.3f: ここで、「.3f」は特定の形式制御文字です。「.3」は精度の限界を示します。つまり、小数点の後に有効数字 3 桁が予約されています。また、「f」は浮動小数点型を意味します。

scanf関数は入力を整形する関数で、コンソールやファイルから指定した形式のデータを読み込むことができます。

基本的な構文は次のとおりです。

scanf("フォーマット制御文字列", address_expression1, address_expression2, ...);

このうち、形式制御文字列は、入力するデータの種類や形式を指定するために使用されます。アドレス式は、scanf 関数が入力データを対応する変数に格納できるように、メモリ内の変数のアドレスを示すために使用されます。入力の形式を含む形式制御文字列。入力の種類は、printf と同じ変換文字と書式指定子を使用して指定できます。

以下は、scanf 関数と printf 関数を使用した完全な例です。

#include <cstdio>

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    printf("您输入的整数是: %d\n", num);

    double floatingNum;
    printf("请输入一个浮点数: ");
    scanf("%lf", &floatingNum);
    printf("您输入的浮点数是: %.2f\n", floatingNum);

    return 0;
}

この例では、printf を使用してプロンプトを出力し、scanf を使用してユーザー入力からデータを読み取ります。整数を読み取る場合は、%d 書式指定子を使用し、& アドレス演算子を介して変数のアドレスを scanf に渡します。浮動小数点数を読み取る場合は、%lf 書式指定子を使用し、& アドレスも使用する必要があります。変数 address を渡す演算子。printf を使用して、読み取ったデータを画面にフォーマットします。浮動小数点数を出力する場合、%.2f 形式コントロールを使用して表示を小数点以下 2 桁のみに制限することに注意してください。

[アドレス文字「&」を取得する機能は、変数のアドレスを取得することです。アドレスはメモリ内の位置を識別し、コンテナ (「ボックス」など) 番号に相当します。
a という名前のコンテナに相当する変数 a があるとします。&a は、このコンテナの番号が見つかり、このコンテナが使用できることを意味します。

ファイルの入出力

C++ でファイル入出力を使用するには、<fstream> ヘッダー ファイルを含める必要があります。一般的に使用されるクラスには、ifstream (入力ファイル ストリーム) と ofstream (出力ファイル ストリーム) が含まれます。これらを使用して、ファイルを開く、ファイルの読み取りと書き込み、およびファイルを閉じる (開く、読み取り、書き込み、閉じる関数など) ことができます。)およびその他の操作。あるファイルの内容を別のファイルにコピーするコードの例を次に示します。

#include <fstream>
#include <iostream>

int main() {
    std::ifstream fin("input.txt"); // 打开输入文件
    std::ofstream fout("output.txt"); // 打开输出文件
    
    int n;
    while (fin >> n) { // 从输入文件读入整数并写入到输出文件
        fout << n << " ";
    }
    
    fin.close(); // 关闭输入文件
    fout.close(); // 关闭输出文件
    return 0;
}

C++の <iomanip>ヘッダー ファイル形式の入出力関数

<iomanip> ヘッダー ファイルは、浮動小数点数を出力するときの桁数の設定、位置合わせの調整、パディング文字の設定など、標準出力ストリームの形式を制御するためによく使用されます。https://en.cppreference.com/w/cpp/header/iomanipまたはhttps://cplusplus.com/reference/iomanip/

含まれる機能:

setiosflags: 指定された形式のフラグを設定します。複数のフラグはビット OR 演算子 (|) で組み合わせることができます。

resetiosflags: 指定されたフォーマットフラグをリセットします。

setbase: 2 進数、10 進数、8 進数、16 進数などの整数出力の基数を設定します。

setfill: フィールド幅が不十分な場合に空白位置を埋めるために使用される埋め込み文字を設定します。

setprecision: 浮動小数点数出力の小数点以下の精度を設定します。

setw: フィールドの幅を設定し、出力時の各フィールド間の間隔に影響します。

get_money: 入力ストリームから金額を取得します。

put_money: 通貨値を出力ストリームに書き込みます。

get_time: 入力ストリームから日付と時刻を取得します。

put_time: 出力ストリームに日付と時刻を書き込みます。

サンプルプログラムは次のとおりです。

#include <iostream>
#include <iomanip>  // 必须引入此头文件才能使用格式控制符

int main() {
    int i = 123;
    double d = 3.14159265359;
    std::string str = "Hello world!";

    // 设置输出浮点数精度为三位小数
    std::cout << std::fixed << std::setprecision(3);
    // 输出浮点数,如果小数位不足三位则自动补零
    std::cout << "d = " << d << std::endl;

    // 设置输出宽度为10个字符,不足则以0填充
    std::cout << std::setw(10) << std::setfill('0') << i << std::endl;

    // 设置输出宽度为20个字符,右对齐,左边用空格填充
    std::cout << std::setw(20) << std::left << str << std::endl;

    // 设置输出方式为科学计数法,保留五位小数
    std::cout << std::scientific << std::setprecision(5) << d << std::endl;

    return 0;
}

出力結果:

d = 3.142
0000000123
こんにちは、世界!
3.14159e+00

説明:

std::fixed および std::scientific は、出力浮動小数点数の表示形式を制御するために使用され、それぞれ固定小数点表示と科学表記法の表示を表します。

std::setprecision(n) は、浮動小数点数の精度を設定するために使用されます。固定モードまたは科学モードでは、小数点の後に予約される桁数を制御します。

std::setw(n) と std::setfill(c) は、出力幅と埋め込み文字を設定するために使用されます。幅は出力データの総桁数を指定し、足りない幅は自動的に埋め込み文字で埋められます。 。これが機能するには、両方の関数を同時に使用する必要があります。

std::left と std::right は、出力の左右の配置を設定するために使用されます。デフォルトは右揃えです。

C++ では、標準ライブラリが提供する関数、変数、型を使用する場合、名前空間識別子 std:: (「::」は名前空間修飾子) を追加する必要があります。たとえば、std::cout を使用して情報を出力します。

コードの先頭で using namespace std; 宣言を使用すると、std 名前空間が導入されます。このようにして、標準ライブラリの関数、変数、型を、std:: を追加せずに後続のコードで直接使用できます。

標準の名前空間を引用するには、上記の例を次のように変更できます。

#include <iostream>
#include <iomanip>  // 必须引入此头文件才能使用格式控制符
using namespace std; // 引用标准名称空间 

int main() {
    int i = 123;
    double d = 3.14159265359;
    string str = "Hello world!";

    // 设置输出浮点数精度为三位小数
    cout << fixed << setprecision(3);
    // 输出浮点数,如果小数位不足三位则自动补零
    cout << "d = " << d << endl;

    // 设置输出宽度为10个字符,不足则以0填充
    cout << setw(10) << setfill('0') << i << endl;

    // 设置输出宽度为20个字符,右对齐,左边用空格填充
    cout << setw(20) << left << str << endl;

    // 设置输出方式为科学计数法,保留五位小数
    cout << scientific << setprecision(5) << d << endl;

    return 0;
}

C++ 言語の入出力の詳細な紹介https://blog.csdn.net/cnds123/article/details/126358415

ユーザー入力を検証するための C++ サンプル コードhttps://blog.csdn.net/cnds123/article/details/130322634

おすすめ

転載: blog.csdn.net/cnds123/article/details/132045856