2010-02-02 9 views
7

उदाहरण में:getchar() और putchar()

#include <stdio.h> 

main() 
{ 
    long nc; 

    nc = 0; 
    while (getchar() != EOF) 
     ++nc; 
    printf("%ld\n", nc); 
} 

मैं काफी यह समझ में नहीं आता। पुचर() चरित्र को बाहर रखेगा, लेकिन ऐसा क्यों है कि ईओएफ के बाद यह सभी पात्रों को बाहर रखता है, और यह इन सभी पात्रों को कहां याद कर रहा है? धन्यवाद।

+5

उम्म ... इस कोड में कोई पुचर() नहीं है। – SoapBox

+0

क्या आप 'putchar()' के बारे में बात कर रहे हैं? – mob

+2

मुझे लगता है कि आपने के एंड आर से गलत कार्यक्रम पोस्ट किया है! –

उत्तर

8

में शेष caracters है यह कहा जाता है बफरिंग और यह ऑपरेटिंग सिस्टम द्वारा किया जाता है हो रहा है। आम तौर पर यह लाइन बफरिंग करता है जहां यह आपके द्वारा रखे गए प्रत्येक चरित्र को स्मृति में सहेजता है, और तब इसे फ़ाइल में लिखता है जब यह लाइन ब्रेक का सामना करता है। यह संसाधनों पर बचाता है क्योंकि फ़ाइल संचालन अन्य परिचालनों की तुलना में अधिक समय लेता है। तो प्रत्येक चरित्र के साथ आउटपुट करने की बजाय, यह बफर में इकट्ठा करने के लिए पात्रों का एक गुच्छा इंतजार करता है और उन्हें एक ही बार में लिखता है।

यह ओएस द्वारा किया गया एक चालाक चालक है जिसे आप प्रोग्रामर को चिंता करने की आवश्यकता नहीं है। बस अपने पात्रों को एक-एक करके फेंक दें और ओएस को आराम से अपने तरीके से संभालें।

1

नहीं, जहां यह कोड केवल इनपुट खाली करता है और लिखता है कि फ्लश से पहले कितने कारक छोड़ दिए गए थे।

यह सुनिश्चित करें कि कोई इनपुट फ़ाइल (stdin)

1

के अपने कोड की समीक्षा करें:

#include <stdio.h> 

अब तक तो अच्छा ...

main() 
{ 
  1. main() समारोह हमेशा एक int देता है। हमेशा।
  2. घोषणा कार्यों वापसी के बिना प्रकार खराब फार्म है, int के लिए यह रूप में चूक, लेकिन लोगों को इस आसान जब पढ़ने कोड याद नहीं है।

चलती पर ...

long nc; 

nc = 0; 

अच्छा प्रपत्र। वैरिएबल का उपयोग करने से पहले शुरू किया जाता है।

while (getchar() != EOF) 
    ++nc; 

यह थोड़ा जटिल है। लेकिन एक समय में एक कदम।

  1. getchar समारोह एक int मानक इनपुट से वापस आती है।
  2. उस मान की तुलना EOF से की जाती है।
  3. तो मानक इनपुट से int मूल्य नहीं EOF है, चर nc वृद्धि की जाती है।

तो while लूप से बाहर निकलने के लिए, मानक इनपुट से एक ईओएफ उत्पन्न किया जाना चाहिए।

नोट: मूल्यों मानक इनपुट से पढ़ने से कोई भी बचाया हैं। अभिव्यक्ति का मूल्यांकन करने के बाद प्रत्येक मान को त्याग दिया जाता है।

स्टाइल: मैं प्रत्येक while कथन के बाद '{' और '}' का उपयोग करने का सुझाव देता हूं। यह सुरक्षित आदत में आने के लिए है।

printf("%ld\n", nc); 

ऊपर बयान प्रिंट कर रहा है (प्रदर्शित) nc में मूल्य। nc में मान मानक इनपुट से पढ़ने वाले वर्णों की संख्या का प्रतिनिधित्व करता है। यह कथन मानक इनपुट से किसी भी वर्ण प्रदर्शित करता है।

} 

अन्त में, main कार्यक्रम ऑपरेटिंग सिस्टम के लिए एक मान लौटाना चाहिए। दो पोर्टेबल मान EXIT_SUCCESS और EXIT_FAILURE हैं, जिन्हें stdlib.h में परिभाषित किया गया है। इन मूल्यों में से एक को निर्दिष्ट करना भी एक अच्छी आदत होगी।

बीटीडब्ल्यू, आपके द्वारा पोस्ट किए गए उदाहरण में कोई putchar नहीं है (जिसे मैंने इस उत्तर में कॉपी किया है)।

1

[यह एक जवाब नहीं है, लेकिन आप टिप्पणी में कोड नहीं डाल सकते]

मुझे लगता है कि आप कुछ इस तरह का मतलब:

#include <stdio.h> 

main() 
{ 
    long nc; 
    nc = 0; 
    char c; 
    while ((c = getchar()) != EOF) 
    { 
     putchar(c); /* prints one char */ 
     ++nc; 
    } 
    printf("%ld\n", nc); /* prints the number of characters read */ 
} 
1

putchar में चार डाल जब यह एक प्रविष्टि आता है तो बफर, फिर यह स्क्रीन शब्द लाइन को स्क्रीन पर लाएगा।

+0

धन्यवाद! मैं यह भी सोच रहा था कि लूप में 'putchar() 'के बावजूद वर्ण टाइप करते समय स्क्रीन पर दिखाई नहीं देते हैं (ऊपर दिए गए कोड में नहीं, बल्कि केआर के उदाहरण में)। – Curious2learn

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