[C++] ファイルの入出力

#include <iostream>
#include <fstream>
using namespace std;


int main() {
    
    ofstream fout("test0.txt");
    if(!fout){
        cout << "ファイルをオープンできませんでした。\n";
        return 1;
    }
    else
        cout << "ファイルをオープンしました。\n";

    fout.close();
    cout << "ファイルをクローズしました。\n";

    return 0;
}

ファイル出力

    fout << "Hello\n";
    fout << "Goodbye\n";
    fout << "ファイルに書き込みました。\n";

### 書式を設定してファイル出力

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;


int main() {
    
    ofstream fout("test0.txt");
    if(!fout){
        cout << "ファイルをオープンできませんでした。\n";
        return 1;
    }
    else
        cout << "ファイルをオープンしました。\n";

    const int num = 5;
    int test[num];
    cout << num << "人の点数を入力してください。\n";
    for(int i=0; i<num; i++){
        cin >> test[i];
    }

    for(int j=0; j<num; j++){
        fout << "No." << j+1 << setw(5) << test[j] << '\n';
     }

    fout.close();

    return 0;
}

### ファイルから入力

#include <iostream>
#include <fstream>
using namespace std;


int main() {
    
    ifstream fin("test0.txt");
    if(!fin){
        cout << "ファイルをオープンできませんでした。\n";
        return 1;
    }

    char str1[16];
    char str2[16];
    fin >> str1 >> str2;
    cout << "ファイルに書き込まれている2つの文字列は\n";
    cout << str1 << "です。\n";
    cout << str2 << "です。\n";

    fin.close();

    return 0;
}
int main() {
    
    ifstream fin("test0.txt");
    if(!fin){
        cout << "ファイルをオープンできませんでした。\n";
        return 1;
    }

    const int num = 8;
    int test[num];
    for(int i=0; i<num; i++){
        fin >> test[i];
    }

    int max = test[0];
    int min = test[0];
    for(int j=0; j<num; j++){
        if(max < test[j])
            max = test[j];
        if(min > test[j])
            min = test[j];
        cout << "No." << j+1 << setw(5) << test[j] << "\n";
    }

    cout << "最高点は" << max << "です。\n";
    cout << "最低点は" << min << "です。\n";

    fin.close();

    return 0;
}

$ g++ -o sample sample.cpp && ./sample
No.1 80
No.2 68
No.3 22
No.4 33
No.5 56
No.6 78
No.7 33
No.8 56
最高点は80です。
最低点は22です。

### コマンドライン引数

#include <iostream>
#include <fstream>
using namespace std;


int main(int argc, char* argv[]) {

    if(argc != 2) {
        cout << "パラメータの数が異なります。\n";
        return 1;
    }
    
    ifstream fin(argv[1]);
    if(!fin){
        cout << "ファイルをオープンできませんでした。\n";
        return 1;
    }

    char ch;
    fin.get(ch);

    while(!fin.eof()){
        cout.put(ch);
        fin.get(ch);
    }

    fin.close();

    return 0;
}

### practice

int main() {

    for (int i=1; i<=30; i++){
        cout.width(3);
        cout.fill('-');
        cout << i;
        if(i % 5 == 0) {
            cout << "\n";
        }
    }

    return 0;
}

$ g++ -o sample sample.cpp && ./sample test0.txt
–1–2–3–4–5
–6–7–8–9-10
-11-12-13-14-15
-16-17-18-19-20
-21-22-23-24-25
-26-27-28-29-30

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;


int main(int argc, char* argv[]) {
    
    ifstream fin(argv[1]);
    if(!fin){
        cout << "ファイルをオープンできませんでした。\n";
        return 1;
    }

    const int num = 8;
    int test[num];
    for(int i=0; i<num; i++){
        fin >> test[i];
    }

    int max = test[0];
    int min = test[0];
    for(int j=0; j<num; j++){
        if(max < test[j])
            max = test[j];
        if(min > test[j])
            min = test[j];
        cout << "No." << j+1 << setw(5) << test[j] << "\n";
    }

    cout << "最高点は" << max << "です。\n";
    cout << "最低点は" << min << "です。\n";

    fin.close();

    return 0;
}