1. Khái niệm nhập xuất file
Nhập xuất file chính là thao tác máy tính đọc và ghi thông tin từ file. Nhiều kỳ thi liên quan tới lập trình thi đấu – bao gồm cả các kỳ thi học sinh giỏi – đều yêu cầu nhập xuất file. Bên cạnh đó, trong trường hợp mà đáp án in ra quá nhiều, nếu in bằng terminal thì đôi khi có thể gây lag máy, một số người sẽ chọn in ra file để giảm thiểu hiện tượng trên. Hay những thao tác liên quan tới việc sinh test, ta buộc phải sử dụng nhập xuất file để có thể so sánh hai file output với nhau.
Chính vì vậy, đây là một trong những thao tác cần biết trước khi nhập môn vào lập trình thi đấu.
2. Áp dụng nhập xuất file
Ta lấy ví dụ yêu cầu đề bài như sau:
Cho số (n), hãy in ra tất cả các số nguyên tố không lớn hơn (n).
Dữ liệu vào: Cho tệp từ văn bản PRIME.INP có dạng: dòng duy nhất ghi số (n) ((n ≤ 10^5))
Kết quả: Ghi ra tệp văn bản PRIME.OUT là các số (a_1, a_2…) là các số tăng dần thỏa mãn yêu cầu đề bài.
Sample Input
Sample Output
Bình thường, ta sẽ code bài này như sau:
Thế nhưng, code trên chỉ hoạt động nếu thông tin lần lượt được nhập xuất từ bàn phím, màn hình chứ không được ghi ra file. Để khắc phục được điều này, ta sẽ thêm câu lệnh sau:
Các bước để nhập xuất file:
Bước 1: Tạo một file có tên có dạng name.INP và lưu nó vào folder có chứa code. Nếu không để file có đuôi .INP được, hãy kiểm tra xem dòng ở dưới phần File name – Save as type: All files hay không.
Bước 2 (Bước này chỉ áp dụng cho Codeblocks): Chạy code. Đến khi terminal hiện như hình, tức là code đã chạy xong.
Bước 3: Tại folder chứa code và file có dạng name.INP, ta sẽ thấy file có dạng name.OUT. Mở file đó ra, ta sẽ thấy đó chính là kết quả của code vừa chạy với đầu vào chính là thông tin đã được viết ở file name.INP.
Bên cạnh đó, có một cách nữa có thể tự động in ra file mà không nhất thiết file dạng name.INP phải tồn tại. Ta sẽ sử dụng lệnh sau:
Nếu file dạng name.INP không tồn tại, ta vẫn có thể nhập – xuất file từ terminal mà không cần tạo file có dạng name.INP để chạy.
Lời khuyên của mình là: Trong các kỳ thi lập trình thi đấu cần đòi hỏi việc nhập xuất file, để đảm bảo rằng code của mình có thể đọc file và ghi ra file, ta nên tạo file có dạng name.INP, chạy code và kiểm tra xem liệu có in ra file có dạng name.OUT hay không. Bởi lẽ, không ít trường hợp rất đáng tiếc liên quan tới việc này như: nhập sai tên file, viết sai cú pháp… Nếu muốn sử dụng câu lệnh if (fopen(“name.INP”, “r”)), hãy đảm bảo rằng bạn phải chắc chắn cú pháp của hàm này.
Bên cạnh đó còn có thể nhập xuất file như sau: