Chuyển hướng standard input và standard output ra file

admin - 22/11/2018

     Trong C++, để nhập xuất dữ liệu ta sử dụng các hàm cin, cout, scanf, printf... nhập liệu từ bàn phím (standard input) và xuất dữ liệu ra màn hình (standard output). Tuy nhiên nếu dữ liệu nhập vào khá lớn, chẳng hạn như bài BASU, và ta cần chạy chương trình nhiều lần để sửa lỗi, thì việc nhập dữ liệu từ bàn phím như vậy mất rất nhiều thời gian.

      Một cách khắc phục tình trạng này là chuyển hướng standard input, thay vì nhập từ bàn phím thì chuyển thành nhập từ file. Chỉ cần nhập liệu vào file input một lần và sau đó có thể chạy chương trình nhiều lần mà không mất công nhập liệu lại. Sử dụng hàm freopen.

       Lời giải cho bài BASU với standard input và output là bàn phím và màn hình:

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

int main()
{
    int i, j, z, k, diem = 0;
    char s[10][10];
        
    for(i= 0; i<7; i++)
         cin>>s[i];
    
    for(i= 0; i<7; i++)
        for(j= 0; j<7; j++)
            if (s[i][j] != '.')
            {
                k = s[i][j] - '0';
                z = abs(j-3) + abs(i-3);
                if (z < 5) diem += k*(10 - z);
            }
    cout<<diem;
    return 0;   
}

      Để test, tạo file test.in (để trong cùng thư mục với file mã nguồn .cpp) với nội dung là input của 1 test (copy từ ví dụ trên trang bài tập):

.......
.......
.......
...111.
.......
.......
.......

 

      Bổ sung thêm vào file mã nguồn dòng freopen:

int main()
{
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);

    int i, j, z, k, diem= 0;
    char s[10][10];
        
    for(i= 0; i<7; i++) cin>>s[i];
   
    for(i= 0; i<7; i++)
        for(j= 0; j<7; j++)
            if (s[i][j] != '.')
            {
                k = s[i][j] - '0';
                z = abs(j-3) + abs(i-3);
                if (z < 5) diem += k*(10 - z);
            }
    cout<<diem;
    return 0;   
}

      (nếu cần thay đổi đường dẫn file input có thể sử dụng: freopen("D:\\test.in", "r", stdin))

     Khi chạy, chương trình sẽ đọc nội dung input từ file test.in và đưa kết quả ra file test.out. Khi nộp bài lên website, chỉ cần xóa 2 dòng freopen trên là xong.

CÁC PHẢN HỒI

Back to Top