ファイルストリームの基礎 解答ページ | Programming Place Plus C++編【言語解説】 第6章

トップページC++編

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① 標準入力から受け取った内容を、テキストファイルへ書き出すプログラムを作成してください。細かい仕様はお任せします。


#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

int main()
{
    std::cout << "文字列を入力してください。" << std::endl;
    std::string buf;
    std::cin >> buf;
    if (!std:cin) {
        std::cerr << "読み込みに失敗" << std::endl;
        std::exit(1);
    }

    std::ofstream ofs("test.txt");
    if (!ofs) {
        std::cerr << "ファイルオープンに失敗" << std::endl;
        std::exit(1);
    }

    ofs << buf << std::endl;
}

実行結果:

文字列を入力してください。
hello!!

実行結果 (test.txt):

文字列を入力してください。
hello!!

標準入力からの入力は std::cin で受け取れます。文字列ならば std::string に受け取るのが安全です。あとは、std::ofstream を使って、ファイルへ書き出せばいいだけです。この辺は本編の解説どおりです。

問題②

問題② 既存のテキストファイルのコピーを作り出すプログラムを作成してください。


#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

int main()
{
    std::ifstream ifs("src.txt");
    if (!ifs) {
        std::cerr << "ファイルオープンに失敗" << std::endl;
        std::exit(1);
    }

    std::ofstream ofs("dest.txt");
    if (!ofs) {
        std::cerr << "ファイルオープンに失敗" << std::endl;
        std::exit(1);
    }

    char c;
    while (ifs.get(c)) {
        ofs << c;
    }
    if (!ifs.eof()) {
        std::cerr << "読み込みに失敗" << std::endl;
        std::exit(1);
    }

    ofs << std::flush;
}

入力ファイル (src.txt):

Hello, World
Hello, C++

実行結果:

実行結果 (dest.txt):

Hello, World
Hello, C++

1文字ずつ読み込んで、1文字ずつ書き込んでいけば、ファイルの内容がコピーできます。


参考リンク


更新履歴

’2018/8/11 全体的に見直し修正。

’2013/12/23 新規作成。



第6章のメインページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る