2014-11-28 7 views
5

मैं सी प्रोग्रामिंग भाषा की किताब से निम्नलिखित कार्यक्रम चला रहा हूँ:getchar() = EOF

#include <stdio.h> 
main() 
{ 
    int c; 
    while((c=getchar()) != EOF) 
    putchar(); 
} 

जब मैं इस कार्यक्रम चलाने के लिए, मैं एक अस्पष्टीकृत व्यवहार मिलता है। अगर मैं निम्न अनुक्रम में कमांड लाइन से अक्षर इनपुट करता हूं: {'h', 'e', 'l', 'l', 'o', '\n', '^D'} तो मुझे स्क्रीन पर मुद्रित निम्न प्रतिक्रिया मिलती है: hello, \n इनपुट के बाद, और प्रोग्राम ^D दर्ज होने पर छोड़ देता है।

हालांकि, जब मैं अनुक्रम को निम्नानुसार बदलता हूं: {'h', 'e', 'l', 'l', 'o', '^D'} तो मुझे निम्न प्रतिक्रिया स्क्रीन पर मुद्रित होती है: hello, लेकिन प्रोग्राम छोड़ नहीं जाता है। ^D दर्ज करने के बाद इसे छोड़ना नहीं चाहिए? कार्यक्रम छोड़ने के लिए मुझे दूसरी बार ^D दर्ज करना होगा। या प्रोग्राम ^D\n के बाद प्रवेश करने के बाद ही छोड़ देता है। मुझे समझ में नहीं आता कि जब मैं ^D दर्ज करता हूं तो प्रोग्राम क्यों नहीं छोड़ा जाता है। कोई विचार?

मैं यूनिक्स सिस्टम पर चल रहा हूं।

उत्तर

17

जब आप^डी ('एंड-ऑफ-ट्रांसमिशन') टाइप करते हैं तो इनपुट बफर फ़्लश किया जाता है और अब तक जो कुछ भी आपने टाइप किया है उसे आपके प्रोग्राम में भेजा जाता है (वास्तव में^डी वर्ण भेजकर)। यह टाइपिंग न्यूलाइन कैरेक्टर के समान है, हालांकि, इस मामले में न्यूलाइन कैरेक्टर भी भेजा जाता है। जब कोई प्रोग्राम शून्य अक्षरों को पढ़ता है तो एक प्रोग्राम बंद होने पर अपने इनपुट को मानता है। ऐसा तब होता है जब आप न्यूलाइन टाइप करते हैं जिसके बाद^डी या दो लगातार^डी।

+3

ध्यान दें कि यह ऑपरेटिंग सिस्टम इनपुट स्ट्रीम की एक संपत्ति है, सी प्रोग्राम के नहीं। –

+0

धन्यवाद, मैरियन और मैट मैकनब। मैंने सोचा कि इनपुट बफर केवल न्यूलाइन चरित्र टाइप करके फिसल गया है। मैं^डी के साथ एक समान व्यवहार के बारे में भी नहीं जानता था। – Nishi

संबंधित मुद्दे