Nền tảng lập trình & môi trường

4. Đọc/ghi qua FILE — phần quan trọng nhất

Đề HSG gần như luôn cho dữ liệu trong một file (ví dụ BAI1.INP) và yêu cầu ghi kết quả ra file khác (ví dụ BAI1.OUT). Hình dưới minh hoạ luồng dữ liệu: chảy từ file vào chương trình, được xử lý, rồi chảy ra file.

Luồng đọc/ghi file. Chương trình đọc dữ liệu từ INPUT.TXT, tính toán, rồi ghi kết quả ra OUTPUT.TXT. Đề thi chấm bằng cách so sánh file kết quả của bạn với đáp án.

Cách gọn nhất: dùng freopen để chuyển hướng cin/cout sang file. Chỉ cần thêm hai dòng ở đầu main, phần còn lại viết y như khi nhập từ bàn phím:

doc-ghi-file.cpp
#include <iostream>
using namespace std;

int main() {
    freopen("BAI1.INP", "r", stdin);   // tu gio cin doc tu file BAI1.INP
    freopen("BAI1.OUT", "w", stdout);  // tu gio cout ghi ra file BAI1.OUT

    int a, b;
    cin >> a >> b;
    cout << a + b << "\n";
    return 0;
}
Cách khác: ifstream / ofstream

Bạn cũng có thể tạo một luồng đọc và một luồng ghi riêng. Cách này không động đến cin/cout:

ifstream.cpp
#include <fstream>
using namespace std;

int main() {
    ifstream fin("BAI1.INP");
    ofstream fout("BAI1.OUT");
    int a, b;
    fin >> a >> b;
    fout << a + b << "\n";
    return 0;
}

Dùng freopen hay ifstream đều được. freopen tiện vì code thân bài giống hệt bản nhập từ bàn phím.

Ba lỗi file làm mất điểm oan
  • Sai tên file — đề ghi BAI1.INP mà bạn gõ bai1.inp hoặc BAI1.IN. Phải đúng từng ký tự.
  • Quên ghi ra file — in ra màn hình thay vì file, máy chấm không thấy kết quả.
  • Sai định dạng xuất — thừa/thiếu dấu cách, dòng trống. In đúng như đề mô tả.