c - language - सी प्रोग्रामिंग इन हिंदी नोट्स pdf




सी प्रोग्रामिंग भाषा में ईओएफ क्या है? (6)

आप अंतिम प्रिंट को कैसे देख सकते हैं? दूसरे शब्दों में ईओएफ के लिए क्या रखा जाए? मैंने परिभाषाओं की जांच की और कहा कि ईओएफ -1 है।

और यदि आप Ctrl-D दर्ज करते हैं तो आप कुछ भी नहीं देखेंगे।

#include <stdio.h>

int main() {
 int c;
 while((c = getchar() != EOF)) {
  printf("%d\n", c);
 }
 printf("%d - at EOF\n", c);
}

आपको अपने कोष्ठक को बदलना चाहिए

while((c = getchar()) != EOF)

क्योंकि "=" ऑपरेटर की "!" ऑपरेटर की तुलना में कम प्राथमिकता है। फिर आपको अपेक्षित परिणाम मिलेंगे। आपकी अभिव्यक्ति बराबर है

while (c = (getchar()!= EOF))

आप आउटपुट के रूप में दो 1 प्राप्त कर रहे हैं, क्योंकि आप "सी! = ईओएफ" तुलना कर रहे हैं। आपके द्वारा दर्ज किए गए चरित्र के लिए यह हमेशा एक बन जाएगा और फिर "\ n" जो रिटर्न मारकर पीछा करता है। पिछली तुलना के अलावा जहां सी वास्तव में ईओएफ है, यह आपको 0 देगा।

ईओएफ के बारे में संपादित करें: ईओएफ आमतौर पर -1 है, लेकिन यह मानक द्वारा गारंटी नहीं है। मानक केवल धारा 7.1 9 .1 में ईओएफ के बारे में परिभाषित करता है:

ईओएफ जो एक पूर्णांक निरंतर अभिव्यक्ति को विस्तारित करता है, प्रकार int और ऋणात्मक मान के साथ, जो कई कार्यों द्वारा वापस किया जाता है ताकि फ़ाइल के अंत को इंगित किया जा सके, यानी स्ट्रीम से कोई इनपुट नहीं;

यह मानना ​​उचित है कि ईओएफ -1 बराबर है, लेकिन ईओएफ का उपयोग करते समय आपको विशिष्ट मूल्य के खिलाफ परीक्षण नहीं करना चाहिए, बल्कि मैक्रो का उपयोग करना चाहिए।


ईओएफ का मान इसे "चार" मानों से अलग करने के लिए एक नकारात्मक पूर्णांक है जो कि 0 से 255 तक है। यह आमतौर पर -1 है, लेकिन यह किसी भी अन्य नकारात्मक संख्या हो सकता है ... POSIX चश्मा के अनुसार, तो आप यह मानना ​​नहीं चाहिए कि यह -1 है।

^ डी वर्ण वह है जिसे आप यूनिक्स / लिनक्स पर एक कंसोल स्ट्रीम पर टाइप करते हैं ताकि यह इनपुट इनपुट को तार्किक रूप से समाप्त कर सके। लेकिन अन्य संदर्भों में (जैसे कि जब आप किसी फ़ाइल से पढ़ रहे हों) यह सिर्फ एक और डेटा चरित्र है। किसी भी तरह से, ^ डी चरित्र (इनपुट का अंत अर्थ) इसे कभी भी एप्लिकेशन कोड में नहीं बनाता है।

जैसा कि @ बास्टियन कहते हैं, अगर getchar() विफल रहता है तो ईओएफ भी वापस आ जाता है। कड़ाई से बोलते हुए, आपको यह देखने के लिए feof या feof को कॉल करना चाहिए कि क्या feof एक त्रुटि या धारा का अंत दर्शाता है। लेकिन ज्यादातर मामलों में आपका आवेदन किसी भी मामले में एक ही चीज़ करेगा।


टाइपो के जोड़े:

while((c = getchar())!= EOF)

की जगह में:

while((c = getchar() != EOF))

इसके अलावा getchar () एक वैध इनपुट के रूप में एक रिटर्न कुंजी का इलाज करता है, इसलिए आपको इसे भी बफर करना होगा। ईओएफ इनपुट के अंत को इंगित करने के लिए एक मार्कर है। आम तौर पर यह सभी बिट्स सेट के साथ एक int है।


#include <stdio.h>
int main()
{
 int c;
 while((c = getchar())!= EOF)
 {
  if( getchar() == EOF )
    break;
  printf(" %d\n", c);
 }
  printf("%d %u %x- at EOF\n", c , c, c);
}

प्रिंट:

49
50
-1 4294967295 ffffffff- at EOF

इनपुट के लिए:

1
2
<ctrl-d>

लिनक्स सिस्टम और ओएस एक्स पर, ईओएफ के कारण इनपुट करने के लिए वर्ण Ctrl - D है । विंडोज के लिए, यह Ctrl - Z है

ऑपरेटिंग सिस्टम के आधार पर, यह चरित्र केवल तभी काम करेगा यदि यह लाइन पर पहला अक्षर है, यानी एंटर के बाद पहला अक्षर। चूंकि कंसोल इनपुट अक्सर लाइन उन्मुख होता है, इसलिए सिस्टम एओएफ चरित्र को तब तक पहचान नहीं सकता जब तक आप इसे एंटर के साथ नहीं ले लेते।

और हाँ, अगर वह चरित्र ईओएफ के रूप में पहचाना जाता है, तो आपका प्रोग्राम वास्तविक चरित्र को कभी नहीं देख पाएगा। इसके बजाय, एक सी प्रोग्राम getchar() से -1 प्राप्त होगा।


#include <stdio.h>

int main() {
    int c;
    while((c = getchar()) != EOF) { 
        putchar(c);
    }    
    printf("%d  at EOF\n", c);
}

ईओएफ पर अधिक स्पष्टता देने के लिए उपर्युक्त कोड को संशोधित करने के लिए, Ctrl + d दबाएं और पुचर को प्रिंट को प्रिंट करने के लिए प्रयोग किया जाता है जबकि लूप के दौरान printf का उपयोग करके बचें।


#include <stdio.h>

int main() {
    int c;
    while((c = getchar()) != EOF) { //precedence of != is greater than =, so use braces
        printf("%d\n", c);
    }
    printf("%d - at EOF\n", c);
}

मुझे लगता है कि ईओएफ के मूल्य की जांच करने का यह सही तरीका है। और मैंने आउटपुट की जांच की।

इनपुट के लिए: एबीसी और एंटर मुझे आउटपुट मिला: 97 98 99 10. (ASCII मान)

इनपुट के लिए Ctrl-D मुझे आउटपुट मिला: -1 - ईओएफ पर। तो मुझे लगता है -1 ईओएफ के लिए मूल्य है।

Ctrl-D की तरह Ctrl-Z की तरह अन्य इनपुट आज़माएं। मुझे लगता है कि यह कंपाइलर से कंपाइलर में भिन्न होता है।





eof