কম্পিউটার টিউটোরিয়াল

C প্রোগ্রামের সোর্স কোড নিজেই প্রিন্ট করা (Quine)

দেওয়া টাস্ক হলো লেখা C প্রোগ্রামটি নিজেই প্রিন্ট করা।

আমাদের একটি C প্রোগ্রাম লিখতে হবে যা নিজের সোর্স কোড প্রিন্ট করবে। তাই আমরা C-তে ফাইল সিস্টেম (file system) ব্যবহার করে সে ফাইলটির কন্টেন্ট পড়ে প্রিন্ট করতে পারি যেটিতে আমরা কোড লিখছি, যেমন আমরা "code1.c" ফাইলে কোড লিখছি, তাহলে আমরা সেই ফাইলটি রিড মোড (read mode)-এ ওপেন করব এবং ফাইলের সব কন্টেন্ট পড়ে আউটপুট স্ক্রিনে প্রিন্ট করব।

কিন্তু, একটি ফাইল রিড মোডে ওপেন করার আগে, আমাদের অবশ্যই জানতে হবে যে আমরা কোন ফাইলে কোড লিখছি। তাই আমরা "__FILE__" ব্যবহার করতে পারি যা একটি ম্যাক্রো (macro) এবং ডিফল্টভাবে করেন্ট ফাইলের পাথ (path) রিটার্ন করে।

ম্যাক্রো "__FILE__" এর উদাহরণ:

#include <stdio.h>
int main() {
    printf("%s", __FILE__);
}

উপরের প্রোগ্রামটি কোড লেখা ফাইলের সোর্স প্রিন্ট করবে।

ম্যাক্রো __FILE__ করেন্ট প্রোগ্রামের পাথ সহ একটি স্ট্রিং রিটার্ন করে যেটিতে এই ম্যাক্রোটি উল্লেখ করা হয়েছে।

তাহলে, আমরা এটিকে ফাইল সিস্টেমে মার্জ (merge) করি করেন্ট ফাইলটি রিড মোডে ওপেন করার জন্য, আমরা করব এভাবে −

fopen(__FILE__, "r");

আলগরিদম (Algorithm)

Start
Step 1 → In function int main(void)
    Declare a character c
    Open a FILE "file" "__FILE__" in read mode
    Loop do-while c != End Of File
        Set c = fgetc(file)
        putchar(c)
    Close the file "file"
Stop

উদাহরণ (C প্রোগ্রাম)

#include <stdio.h>

int main(void) {
    // নিজের সোর্স কোড প্রিন্ট করতে
    char c;
    // __FILE__ করেন্ট C প্রোগ্রাম ফাইলের লোকেশন পায়
    FILE *file = fopen(__FILE__, "r");
    do {
        // ফাইলের কন্টেন্ট প্রিন্ট করা
        c = fgetc(file);
        putchar(c);
    } while (c != EOF);
    fclose(file);
    return 0;
}

আউটপুট

#include <stdio.h>
int main(void) {
    // নিজের সোর্স কোড প্রিন্ট করতে
    char c;
    // __FILE__ করেন্ট C প্রোগ্রাম ফাইলের লোকেশন পায়
    FILE *file = fopen(__FILE__, "r");
    do {
        // ফাইলের কন্টেন্ট প্রিন্ট করা
        c = fgetc(file);
        putchar(c);
    } while (c != EOF);
    fclose(file);
    return 0;
}

ব্যাখ্যা: এটি একটি Quine প্রোগ্রামের উদাহরণ। __FILE__ ম্যাক্রো কম্পাইল টাইমে বর্তমান ফাইলের পাথ দিয়ে রিপ্লেস হয়। fopen() দিয়ে ফাইলটি রিড মোডে ওপেন করা হয়, fgetc() দিয়ে ক্যারেক্টার বাই ক্যারেক্টার পড়া হয়, এবং putchar() দিয়ে প্রিন্ট করা হয়। EOF (End Of File) পাওয়া পর্যন্ত লুপ চলে।

  1. সি শার্প প্রোগ্রাম: ফাইলের ইনফরমেশন (Attributes) পাওয়ার পদ্ধতি

  2. সি শার্প প্রোগ্রাম: অ্যারে ফাইলে লেখা (Write Array to File)

  3. ফাইল একটি বৈধ 32-বিট অ্যাপ্লিকেশন নয়

  4. সমাধান: ফাইল অন্য প্রোগ্রামে খোলা আছে