2012-02-16 32 views
11

सी में printf फ़ंक्शन हमेशा स्क्रीन पर आउटपुट प्रिंट नहीं करता है। उदाहरण के लिए यदि आप स्ट्रिंग के अंत में \ n रखना भूल जाते हैं तो आप प्रिंटिंग कर रहे हैं कभी-कभी आपको ओ/पी नहीं मिलता है। क्या प्रिंटफ प्रिंट नहीं होने पर कुछ अन्य स्थितियां हैं। मुझे किसी को यह कहते हुए याद है कि ऐसी 7 स्थितियां हैं। क्या आप कृपया मदद कर सकते हैं।प्रिंटफ प्रिंट करने में विफल रहता है?

+5

क्या आप वाकई 'printf' के बारे में सोच रहे हैं, और सर्वनाश की पूर्व शर्त नहीं हैं? –

+3

@KerrekSB या शायद 7 वस्तुओं के साथ एक आने वाले होमवर्क के संकेत? – cnicutar

+1

यह आउटपुट डिवाइस पर निर्भर प्लेटफॉर्म विशिष्ट लगता है। आप किस ओएस और सिस्टम का उपयोग कर रहे हैं? –

उत्तर

14

मानक आउट एक बफर स्ट्रीम है, जब तक कोई नई लाइन नहीं रखी जाती है, स्ट्रीम बंद हो जाती है, या प्रोग्राम सामान्य रूप से बाहर निकलता है, तब तक फ्लश करने की गारंटी नहीं है। यदि कार्यक्रम असामान्य रूप से बाहर निकलता है, तो स्ट्रीम के लिए फ्लश नहीं करना संभव है। मानक आउट लाइन buffered है, यही कारण है कि एक नई लाइन इसे फ्लश करेगा। ऐसे बफर हैं जो एक नई लाइन के साथ फ्लश नहीं करेंगे।

+0

मुझे पता है कि यह एक बहुत पुराना सवाल है लेकिन प्रिंटिंग के 'printf' को किस तरह की चीज रोक सकती है? – Mouin

0

user1214634 ने कहा कि stdout buffered है और केवल कुछ स्थितियों के तहत स्क्रीन पर प्रिंट करता है। यदि आप इसे प्रिंट करने के लिए मजबूर करना चाहते हैं तो आप fflush (stdout)

7

पर कॉल नहीं कर सकते हैं, यह printf हमेशा प्रिंट नहीं करेगा, यह कि तुरंत प्रिंट करने की गारंटी नहीं है। इसका अर्थ यह है कि यदि आप इसे डिबगिंग उद्देश्यों के लिए उपयोग कर रहे हैं, तो आप गारंटी नहीं दे सकते कि यह कोड में होने पर बिल्कुल ठीक होगा। यदि आप यह सुनिश्चित करना चाहते हैं कि यह ठीक प्रिंट करता है जब आपने कहा कि यह fflush(stdout) पर कॉल करें।

नोट: आप आमतौर पर नहीं fflush(stdout) उपयोग करने के लिए जब तक आप डीबग कर रहे हैं चाहते हैं, इसके वास्तव में गहन संसाधन और यदि आप गति प्रदर्शन के बारे में परवाह बिल्कुल यह संभावित आप धीमा करने के लिए है।

1

एक और विशेष मामला मैं बस का सामना करना पड़ा है:

मेरे चर हैं:

line="-24 hours" 
line2="24 hours" 

और कोशिश

printf $line 
printf $line2 

न तो काम करेंगे। दूसरा दूसरा शब्द "घंटों" और पहली गलतियों को छोड़ देता है -24 ध्वज के रूप में।

इसलिए, जब भी मैं printf का उपयोग मैं सभी खतरनाक वर्ण यदि संभव हो तो,

sed -r "s/[/\ #;&~]/_/g" 

काश printf के कोड डेवलपर द्वारा सुधार किया जा सकता का उपयोग करके निकाल देंगे।

देखभाल करें

+0

मैं उलझन में हूं, यह सी कैसी है? –

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