2011-01-15 10 views
5

एक सी ++ एप्लिकेशन के लिए, मैं stdin पर प्रोग्राम के अंत (ईओएफ) को कैसे प्रोग्राम कर सकता हूं?मैं stdin पर eof कैसे मजबूर कर सकता हूँ?

+0

आपका मतलब है 'स्टडीन पर बल ईओएफ'? आप stdin (या cin) बंद कर सकते हैं। आप अपने लूप को एकतरफा समाप्त कर सकते हैं। आप फ़ाइल के अंत तक खोज सकते हैं (लेकिन यह टर्मिनल या पाइप इनपुट के रूप में मदद नहीं करेगा)। आप इस मुद्दे को 'फ्रीपेन()' के साथ मजबूर करने में सक्षम हो सकते हैं;/dev/null या NUL से पढ़ने के लिए मानक इनपुट को पुन: असाइन करें:। –

उत्तर

6

दरअसल, आप नहीं कर सकते। जब तक आप stdin से डेटा पढ़ सकते हैं, ईओएफ तक नहीं पहुंचा है, और वास्तव में आप इसे कभी नहीं पहुंच सकते हैं। हालांकि, आप को बंद कर सकते हैं। इसे बंद करने के लिए, ऐसा करते हैं:

fclose(stdin); 

इस के बाद, आप stdin से डेटा नहीं पढ़ सकते हैं।

8

यदि आप यूनिक्स जैसी प्रणाली में टर्मिनल पर हैं, तो Ctrl-D पर क्लिक करें। विंडोज़ में, Ctrl-Z

संपादित करें: "प्रोग्रामेटिक रूप से" करने की इच्छा को देखते हुए, मैं fclose(stdin) को आजमाने का सुझाव देता हूं। यदि किसी भी तरह से यह पर्याप्त नहीं है, तो वास्तविक पादरी के अलावा किसी अन्य चीज़ को संदर्भित करने के लिए स्ट्रीम सेट करने के लिए std::cin.rdbuf() का उपयोग करने के लिए एक पागल विचार हो सकता है, और फिर वह स्ट्रीम करें जो आप चाहते हैं। लेकिन यह खराब गंध शुरू होता है, जैसे आप कंप्यूटर के खिलाफ लड़ रहे हैं, इसलिए मैं असली लक्ष्य क्या है इसके बारे में और जानना चाहता हूं।

+0

लेकिन यह एक सी ++ एप्लिकेशन के भीतर से है, तो Ctrl-D काम भेज रहा है? – WilliamKF

+0

ओह मैं अब "प्रोग्रामेटिक" देखता हूं। हो सकता है कि आप अधिक विस्तार से वर्णन कर सकें कि आप क्या करने की कोशिश कर रहे हैं? –

+1

बस 0x1A (Ctrl + Z के लिए ASCII कोड) stdin लिखें। – Tergiver

1

विशेष रूप से इसके लिए बनाए गए प्रत्येक स्ट्रीम के लिए एक अच्छा छोटा फ़ंक्शन उपलब्ध है।

 std::cin.setstate(std::cin.eofbit); 


इस के लिए दस्तावेज़ बहुत सादा है लेकिन कुछ है:

 stream.setstate(stream.flags) 


तो अपने कोड में आप एक सरल शर्त यह है कि जैसे कुछ चलाता है हो सकता है:

यह वाक्य रचना है कुछ की तरह है cppreference.com और cplusplus.com पर।

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