Nhiệm vụ: viết chương trình C in chính mã nguồn của nó (self-replicating program / Quine).
Sử dụng hệ thống file: mở file chứa mã nguồn ở chế độ đọc, đọc và in nội dung. Cần biết tên file → dùng macro __FILE__ (trả về đường dẫn file hiện tại).
Ví dụ macro __FILE__
#include <stdio.h>
int main() {
printf("%s", __FILE__);
}
Chương trình trên in đường dẫn file chứa mã nguồn.
Kết hợp với file I/O: fopen(__FILE__, "r") mở file hiện tại đọc.
Thuật toán
Bắt đầu
B1: Khai báo ký tự c
B2: Mở FILE "file" = __FILE__ ở chế độ "r"
B3: Vòng lặp do-while c != EOF
c = fgetc(file)
putchar(c)
B4: Đóng file
Kết thúc
Ví dụ mã nguồn
#include <stdio.h>
int main(void) {
// In mã nguồn chính chương trình
char c;
// __FILE__ lấy đường dẫn file C hiện tại
FILE* file = fopen(__FILE__, "r");
do {
c = fgetc(file);
putchar(c);
} while (c != EOF);
fclose(file);
return 0;
}
Kết quả đầu ra
#include <stdio.h>
int main(void) {
// In mã nguồn chính chương trình
char c;
// __FILE__ lấy đường dẫn file C hiện tại
FILE* file = fopen(__FILE__, "r");
do {
c = fgetc(file);
putchar(c);
} while (c != EOF);
fclose(file);
return 0;
}