EOF (End of File) क्या है?
EOF इनपुट के अंत को इंगित करता है। यह एक स्थिरांक मैक्रो है (आमतौर पर -1) जो stdio.h में परिभाषित होता है।
- कीबोर्ड इनपुट में: Windows में Ctrl+Z, Linux/Mac में Ctrl+D दबाने पर EOF उत्पन्न होता है
- फ़ाइल पढ़ने में: फ़ाइल का अंत पहुंचने पर EOF लौटाया जाता है
एल्गोरिदम
चरण 1: फ़ाइल को लिखने मोड में खोलें
चरण 2: जब तक कैरेक्टर EOF तक न पहुंचे, प्रत्येक कैरेक्टर को फ़ाइल पॉइंटर में लिखें
चरण 3: फ़ाइल बंद करें
चरण 4: फ़ाइल को पढ़ने मोड में फिर से खोलें
चरण 5: फ़ाइल से कैरेक्टर पढ़ें जब तक fp EOF के बराबर न हो
चरण 6: कंसोल पर कैरेक्टर प्रिंट करें
चरण 7: फ़ाइल बंद करें
प्रोग्राम: फ़ाइल में लिखना और पढ़ना (EOF तक)
#include <stdio.h>
int main() {
char ch;
FILE *fp;
// लिखने के लिए फ़ाइल खोलें
fp = fopen("std1.txt", "w");
if (fp == NULL) {
printf("फ़ाइल खोलने में त्रुटि!\n");
return 1;
}
printf("टेक्स्ट दर्ज करें (Windows: Ctrl+Z, Linux/Mac: Ctrl+D से समाप्त):\n");
// कैरेक्टर दर कैरेक्टर पढ़ें जब तक EOF न मिले
while ((ch = getchar()) != EOF) {
putc(ch, fp); // फ़ाइल में लिखें
}
fclose(fp);
// पढ़ने के लिए फ़ाइल खोलें
fp = fopen("std1.txt", "r");
if (fp == NULL) {
printf("फ़ाइल खोलने में त्रुटि!\n");
return 1;
}
printf("\nफ़ाइल पर टेक्स्ट:\n");
// फ़ाइल से पढ़ें जब तक EOF न मिले
while ((ch = getc(fp)) != EOF) {
putchar(ch); // स्क्रीन पर प्रिंट करें
}
fclose(fp);
return 0;
}
आउटपुट
टेक्स्ट दर्ज करें (Windows: Ctrl+Z, Linux/Mac: Ctrl+D से समाप्त):
यह EOF प्रदर्शन उदाहरण है
यदि आपका टेक्स्ट टाइपिंग समाप्त हो गया तो Ctrl+Z दबाएं
^Z
फ़ाइल पर टेक्स्ट:
यह EOF प्रदर्शन उदाहरण है
यदि आपका टेक्स्ट टाइपिंग समाप्त हो गया तो Ctrl+Z दबाएं
महत्वपूर्ण बिंदु
1. EOF एक चर नहीं, int स्थिरांक है
// सही: int का उपयोग करें (EOF -1 हो सकता है, जो char में फिट नहीं होता)
int ch;
while ((ch = getchar()) != EOF) { ... }
// गलत: char का उपयोग (EOF -1, char unsigned हो सकता है → 255)
char ch;
while ((ch = getchar()) != EOF) { ... } // अनंत लूप संभव!
2. सामान्य फ़ाइल ऑपरेशन पैटर्न
FILE *fp = fopen("file.txt", "r");
if (fp == NULL) { /* त्रुटि संभालें */ }
int ch;
while ((ch = fgetc(fp)) != EOF) {
// ch प्रोसेस करें
}
fclose(fp);
3. feof() vs EOF जांच
// अनुशंसित: रीड ऑपरेशन की रिटर्न वैल्यू जांचें
while (fgets(buffer, size, fp) != NULL) { ... }
// कम अनुशंसित: feof() लूप के बाद सत्य होता है
while (!feof(fp)) {
fgets(buffer, size, fp);
if (feof(fp)) break; // अतिरिक्त जांच आवश्यक
}
4. बाइनरी फ़ाइलों के लिए
// fread आइटम काउंट लौटाता है, EOF नहीं
while (fread(&item, sizeof(item), 1, fp) == 1) { ... }
व्यावहारिक उदाहरण: फ़ाइल से पूर्णांक पढ़कर योग करना
#include <stdio.h>
int main() {
FILE *fp = fopen("numbers.txt", "r");
if (!fp) return 1;
int num, sum = 0, count = 0;
while (fscanf(fp, "%d", &num) == 1) { // 1 आइटम सफलतापूर्वक पढ़ा गया
sum += num;
count++;
}
printf("कुल संख्याएं: %d\n", count);
printf("योग: %d\n", sum);
if (count > 0) printf("औसत: %.2f\n", (float)sum / count);
fclose(fp);
return 0;
}