Wednesday, April 22, 2009

सीखिए सी 14 : printf()

आप प्रोग्राम 1 में printf() फलनक (फंक्शन) से मिल चुके हैं। यह सी भाषा का एक अत्यंत उपयोगी फलनक है। यह फलनक stdio.h संग्रह में रहता है। इस लेख में हम इसके बारे में विस्तृत जानकारी प्राप्त करेंगे।

इसका पूरा नाम है प्रिंट फोर्मैट। इसका मुख्य काम है कंप्यूटर की स्मृति में संचित आंकड़ों को कंप्यूटर के स्क्रीन पर लाना। हमने पहले स्पष्ट किया था कि कंप्यूटर के स्मृति-कोषों में आंकड़े 0 और 1 के क्रम में रहते हैं और राशियों के नामकरण के दौरान char, int, float आदि सूचक शब्द जोड़कर प्रोग्राम कंप्यूटर को यह निर्देश देता है कि इन नामों से जुड़े स्मृति-कोषों में रखे आंकड़े किस प्रकार के हैं। printf() फलनक स्मृति में से आंकड़े लाकर प्रोग्राम में उन्हें जिस रूप में प्रदर्शित करने की आवश्यकता होती है, उस रूप में स्क्रीन पर प्रदर्शित करता है। इसके लिए वह अपने कोष्ठकों में दी गई सूचनाओं का उपयोग करता है। आइए एक उदाहरण से इन सब बातों को समझते हैं।

------------------------
प्रोग्राम-2

/* printf() ka udaharan */

#include <stdio.h>

void main ()
{
int namoone_ka_ank = 9;
printf("Namoone ka ank %d hai.\n", namoone_ka_ank);
}
------------------------------------

प्रोग्राम को संकलित करके चलाने पर स्क्रीन पर यह दिखता है:

आउटपुट:
Namoone ka ank 9 hai.

इस प्रोग्राम में namoone_ka_ank एक पूर्णांक राशि का नाम है। इस नाम के पूर्व लिखा गया int शब्द हमें यह सूचना देता है। इस पूर्णांक राशि को = चिह्न की सहायता से 9 का मान दिया गया है।

printf() के कोष्ठकों में आपको तीन-चार नई बातें दिखेंगी। अब हम उन्हें स्पष्ट करते हैं।

1. %d चिह्न
जैसा कि हमने देखा, आंकड़े char, int, long या float प्रकार के हो सकते हैं। किसी राशि को printf() द्वारा ठीक से प्रदर्शित कराने से पहले हमें printf() को यह बताना होता है कि वह जिस राशि को प्रदर्शित कर रहा है, वह किस प्रकार का है। यह सूचना उसे उसके कोष्ठकों में दुहरे उद्धरण चिह्नों के बीच %c, %d, %l, %s या %f चिह्न रखकर दी जाती है। ये चिह्न क्रमशः char, int, long, string और float को सूचित करते हैं।

प्रकारसूचक शब्दफोर्मैटिंग चिह्न
वर्णchar%c
पूर्णांकint%d
दीर्घ पूर्णांकlong%l
दशमलव अंकfloat%f
वाक्यांशstring%s


उपर्यूक्त प्रोग्राम में %d को देखकर printf() समझ जाता है कि उसे एक पूर्णांक राशि को %d के स्थान पर प्रदर्शित करना है। यह कौन-सी राशि है, इसकी सूचना printf() को उसके कोष्ठक में दुहरे उद्धरण चिह्नों के आगे लिखे गए चर राशि के नाम से पता चलता है।

2. , चिह्न
दुहरे उद्धरण चिह्नों के आगे जो अल्प विराम (,) है, उसकी ओर विशेष ध्यान दीजिए। यह अल्प विराम महत्व रखता है। यदि आप उसे छोड़ देंगे तो संकलक प्रोग्राम का संकलन उस स्थान पर आकर रोक देगा। सी भाषा में अल्प विराम (,) किसी उक्ति के दो हिस्सों को अलगाने के लिए उपयोग किया जाता है। इस उक्ति में अल्प विराम के बाद उस राशि का नाम है, जिसे printf() को प्रदर्शित करना है।

3. चर राशि का नाम namoone_ka_ank
हमारे प्रोग्राम में printf() वाली उक्ति में अल्प विराम के बाद namoone_ka_ank लिखा है। इसे देखकर printf() समझ जाता है कि उसे पूर्णांक के रूप में namoone_ka_ank नामक राशि को प्रदर्शित करना है। वह तुरंत कंप्यूटर की स्मृति में से उन आंकड़ों को ले आता है जो namoone_ka_ank नाम से जुड़े स्मृति कोषों में रखे हैं और इन आंकड़ों को पूर्णांक में बदलकर प्रदर्शित करता है। इसलिए हम आउटपुट वाक्य में %d के स्थान पर 9 देखते हैं, जो इस राशि का मान है।

4. \n चिह्न
printf() के कोष्ठकों में दुहरे उद्धरण चिह्नों के अंदर जो संदेश रखा गया है, उसके अंत में \n चिह्न है। इसे न्यू-लाइन वर्ण, यानी नई पंक्ति की सूचना देनेवाला वर्ण कहते हैं। कुंजी पटल के ऐंटर या रिटर्न नामक कुंजी को दबाने पर कर्सर एक नई पंक्ति की शुरुआत करता है। \n वर्ण इस ऐंटर या रिटर्न कुंजी का प्रतीक है। यद्यपि यह दो वर्णों से बना है (\ और n), लेकिन कंप्यूटर इसे एक वर्ण के रूप में पढ़ता है। वास्तव में \, जिसे बैकश्लैश कहा जाता है, कुछ वर्णों के साथ जुड़कर कुछ विशेष वर्ण पैदा करता है। ये विशेष वर्ण कुंजी पटल की उन कुंजियों को दर्शाते हैं जो स्क्रीन पर दिखाई नहीं देते, जैसे टैब, ऐंटर या रिटर्न, बैकस्पेस आदि।

इन विशेष वर्णों की सूची नीचे दी गई है।

विशेष वर्ण अर्थ
/n नई पंक्ति
/t टैब स्पेस



हमारे प्रोग्राम में \n को देखकर printf() संदेश के अंत में एक नई पंक्ति शुरू करता है, यानी कर्सर वाक्य पूरा होने के बाद अगली पंक्ति के शुरुआती स्थान पर चला जाता है।

printf() एक साथ अनेक राशियों को प्रदर्शित कर सकता है। आइए देखें कैसे।

-----------------------
प्रोग्राम-3

/* printf() dwara ek se adhik rashiyon ka pradarshan */

#include <stdio.h>

void main()
{
char namoone_ka_varna='a';
int namoone_ka_ank=9;
printf("Namoone ka varna %c hai aur namoone ka ank %d hai.\n",
namoone_ka_varna, namoone_ka_ank);
}
---------------------

आउटपुट:
Namoone ka varna a hai aur namoone ka ank 9 hai.

इस बार प्रोग्राम में दो राशियां घोषित की गई हैं: namoone_ka_varna और namoone_ka_ank. पहली char (वर्ण) प्रकार की राशि है और दूसरी int (पूर्णांक) प्रकार की।

namoone_ka_varna में a का मान आरोपित किया गया है। इसके लिए राशि के नाम के आगे आरोपण चिह्न = के बाद a को इकहरे उद्धरण चिह्नों से घेरकर रखा गया है, ऐसे - 'a'।

char प्रकार की राशियों में मान रखने की यही विधि है, यानी मान को इकहरे उद्धरण चिह्नों में दर्शाना।

nammone_ka_ank में 9 का मान आरोपित किया गया है।

इस बार printf() के कोष्ठकों में प्रतिशत चिह्न (%) वाले दो विशेष वर्ण हैं, %c और %d क्योंकि हम दो राशियों को प्रदर्शित करना चाहते हैं। तदनुसार दुहरे उद्धरण चिह्नों के बाद अल्प विराम के आगे भी दो राशियों के नाम हैं। ध्यान दें कि ये दोनों नाम उसी क्रम में हैं जिस क्रम में प्रतिशत चिह्न वाले वर्ण हैं, यानी namoone_ka_varna पहले और उसके बाद namoone_ka_ank। प्रतिशत-चिह्न-युक्त चिह्नों का क्रम और चर राशियों का क्रम समान होना बिलकुल आवश्यक है।
प्रोग्राम को संकलित करके चलाने पर आपको वांचित आउटपुट प्राप्त होता है:

Namoone ka varna a hai aur namoone ka ank 9 hai.

एक और उदाहरण लीजिए।

--------------------------
प्रोग्राम 4

/* printf() ka ek aur udaharan */

#include <stdio.h>

void main ()
{
float namoone_ka_ank = 9;
printf("Namoone ka ank %f hai.\n", namoone_ka_ank);
}
-----------------------------
आउटपुट:
Namoone ka ank 9.000000 hai.

क्या आप इस आउटपुट को देखकर चौंके? बात सीधी-सी है। ध्यान दीजिए कि हमने namoone_ka_ank को दशमलव अंक (float) घोषित किया है। सी भाषा में दशमलव अंकों में सामान्यतः दशमलव के बाद छह स्थान होते हैं। चूंकि हमने ये स्थान स्पष्ट नहीं किए हैं (हमने केवल 9 लिखा है), कंप्यूटर ने इन स्थानों को शून्य से भर दिया है।

6 comments:

  1. वर्तमान में हिंदी को ऐसी ही जानकारियों की आवश्यकता है। प्रशंसनीय योगदान है। आभार।

    ReplyDelete
  2. बहुत अच्‍छा प्रयास .. कुछ दिन छूट गया .. अब समझ में नहीं आ रहा .. पर औरों के लिए अवश्‍य फायदेमंद होगा।

    ReplyDelete
  3. संगीता जी, साथ बने रहने के लिए आभार। समझ न आए, तो कोई बात नहीं, सी का महत्व उन लोगों के लिए ही है जो उसमें प्रोग्राम लिखते हैं, या उन छात्रों के लिए जिन्हें उसे स्कूल में सीखना पड़ता है। अन्य लोगों के लिए यह एक कठिन और नीरस विषय ही है, मैं मानता हूं।

    और सी जैसी भाषा सीखने का एकमात्र तरीका संकलक के सामने बैठकर सी के प्रोग्राम लिखना और उन्हें संकलित करके देखना है।

    यदि आपका साथ आगे न रह सका, तो मैं बिलकुल भी बुरा नहीं मानूंगा।

    एक बार फिर आभार।

    ReplyDelete
  4. Balasubhramanyamji aap ne har pehlu ko kaafi baariki se samjaya hai...jo puri tarah dimaag me baith gaya hai ab...
    me MCA karta hunn lekin itni barki se kabhi abhyaash nahi kiya...
    aap ka bahut bahut aabhar!!!

    ReplyDelete
  5. maine kaafi search kiyaa lekin aisa help nahi mila, woh bhi apni hindi me...iska hindi me. kyoki hindi me term jyaada thik se samjh me aate hai...

    ReplyDelete