2012-08-26 22 views
8

संभव डुप्लिकेट:
Does reading from stdin flush stdout?stdout और stdin रिश्तों

सी ++ स्टैंडर्ड गारंटी देता है कि सभी डेटा बफर में निहित std के बगल में कॉल :: CIN से पहले प्रिंट किया जाएगा। इस तरह:

#include <iostream> 

void bar() 
{ 
    int x; 
    std::cout << "Enter an integer: "; /* 1 */ 
    std::cin >> x; /* 2 */ 
} 
इस वजह से

:

आईएसओ/आईईसी 14882: 2011

27.4.2 संकीर्ण धारा वस्तुओं [narrow.stream.objects]

2 ऑब्जेक्ट cin प्रारंभ होने के बाद, cin.tie() & cout देता है। इसका राज्य अन्यथा मूलभूत_ओएस :: init (27.5.5.2) के लिए आवश्यक है।

27.4.3 वाइड धारा [wide.stream.objects]

2 के बाद वस्तु wcin आरंभ नहीं हो जाता, वस्तुओं wcin.tie() & wcout देता है। इसकी स्थिति अन्यथा basic_ios :: init (27.5.5.2) के लिए आवश्यक है।

लेकिन सी में वहाँ वास्तव में कोई गारंटी है कि सब कुछ stdout बफर में निहित stdin करने का प्रयास करने से पहले प्रिंट किया जाएगा रहे हैं?

#include <stdio.h> 

void bar() 
{ 
    int x; 
    printf("Enter an integer: "); /* 1 */ 
    scanf("%d", &x); /* 2 */ 
} 

मुझे पता है कि stdout लाइन buffered है, लेकिन मैं ऐसी परिस्थितियों में '\ n' चरित्र नहीं रखना चाहता हूं। सी में इनपुट अनुरोध से पहले आउटपुट प्राप्त करने का एकमात्र सही तरीका है fflush/fclose/etc का उपयोग करना?

+0

हैं (और नहीं सी ++ में stdio उपयोग के बारे में), यह सी और नहीं सी ++ के साथ टैग करें। – Mat

+2

मैंने टैग सी जोड़ा है लेकिन यह प्रश्न सी और सी ++ आईओ तुलना के बारे में है, इसलिए मैं सी ++ टैग भी रखना चाहता हूं। – FrozenHeart

+0

ओह, यह थोड़ी देर हो गया है क्योंकि यहां एक प्रश्न ने मेरी रुचि बढ़ा दी है। मैंने वास्तव में 'टाई' पर ध्यान नहीं दिया था, मैं इसे देख लूंगा :) –

उत्तर

4

नहीं, ऐसी कोई गारंटी नहीं है। हां, आप यह सुनिश्चित करने के लिए fflush() का उपयोग कर सकते हैं कि stdout flushed है।

यह सवाल निकट से संबंधित है: अपने प्रश्न सी के बारे में है Does reading from stdin flush stdout?

3

मुझे सी ++ में सीन/कॉउट संबंध नहीं पता था, धन्यवाद। सी में, मुझे stdout बफर फ्लश करने के लिए अन्य तरीका नहीं पता है। मैं हमेशा fflush का उपयोग करता हूं जब मुझे यह सुनिश्चित करने की आवश्यकता होती है कि आउटपुट किसी दिए गए समय पर मुद्रित किया गया हो।

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