मुद्रण सी में 0 है?


345

मैं एक 0 को प्रिंट करने के लिए एक अच्छा तरीका खोजने की कोशिश कर रहा हूं, जैसे कि एक ज़िपकोड के लिए 01001। जबकि संख्या को 1001 के रूप में संग्रहीत किया जाएगा, इसे करने का एक अच्छा तरीका क्या है?

मैंने या तो केस स्टेटमेंट का उपयोग करने के बारे में सोचा / यदि फिर यह पता लगाने के लिए कि संख्या कितने अंकों की है और फिर इसे अतिरिक्त वर्णों में मुद्रण के लिए अतिरिक्त वर्ण के रूप में परिवर्तित करें लेकिन मैं मदद नहीं कर सकता, लेकिन लगता है कि ऐसा करने का कोई तरीका हो सकता है प्रिंटफ प्रारूप वाक्यविन्यास जो मुझे अलग कर रहा है।

जवाबों:


567
printf("%05d", zipCode);

0इंगित करता है कि क्या आप के साथ कर रहे हैं गद्दी और 5पूर्णांक संख्या की लंबाई से पता चलता है। उदाहरण के लिए यदि आप "%02d"(तारीखों के लिए उपयोगी) का उपयोग करते हैं, तो यह केवल कॉलम कॉलम (यानी ) के 06बजाय संख्याओं के लिए पैड शून्य होगा 6। उदाहरण 2, "%03d"लोगों के कॉलम में एक नंबर के लिए 2 शून्य और दसियों कॉलम में एक नंबर के लिए 1 शून्य पैड होगा। अर्थात। (संख्या 7 गद्देदार 007और संख्या 17 गद्देदार 017)।


237
कृपया zipcodes को संख्याओं के रूप में संग्रहीत न करें। कुछ देशों के अपने ज़िपकोड में अक्षर होते हैं।
धारा

1
आपके मामले के लिए, यह पर्याप्त होगा। किसी अज्ञात लंबाई के पूर्णांक में अग्रणी शून्य कैसे हो सकता है?
डोमिनिक मोटुका

आपको अंतिम गद्देदार स्ट्रिंग की अधिकतम लंबाई जानने की आवश्यकता है। वैकल्पिक रूप से, यदि आप हमेशा 5 अग्रणी शून्य चाहते थे, तो "00000" + पूर्णांक। आदि
mlambie

160

सही समाधान डेटाबेस में ज़िप कोड को एक STRING के रूप में संग्रहीत करना है। इस तथ्य के बावजूद कि यह एक संख्या की तरह लग सकता है, यह नहीं है। यह एक कोड है, जहां प्रत्येक भाग का अर्थ है।

एक संख्या एक ऐसी चीज़ है जिस पर आप अंकगणित करते हैं। एक ज़िप कोड वह नहीं है।


32
हां। आपका अवलोकन बिल्कुल सही है। यह वो है जो मैं करुंगा। हालांकि सवाल पूछने वाला व्यक्ति शायद उत्पादन कोड के बजाय होमवर्क से निपटने की कोशिश कर रहा है। उत्तर को प्रश्न पूछने वाले व्यक्ति के अनुरूप होना चाहिए।
EvilTeach

15
मुझे लगता है कि मुझे यह वर्णन करने के लिए अधिक सटीक रूप से वर्णन करना चाहिए था कि मैं यह देखना चाहता था कि मैं उस भाषा में अग्रणी और अनुगामी चरित्र कैसे कर सकता हूं जिससे मैं परिचित नहीं था। मैं भविष्य में मनमाने उदाहरणों से अधिक सावधान रहूँगा!
zxcv

3
अन्य देशों, जैसे ब्रिटेन में ज़िप कोड में पत्र हैं
jjxtra


16

जिपकोड एक अत्यधिक स्थानीय क्षेत्र है, कई देशों में उनके पोस्टकोड, जैसे, यूके, कनाडा में वर्ण हैं। इसलिए इस उदाहरण में आपको इसे स्टोर करने के लिए एक स्ट्रिंग / वर्चर फ़ील्ड का उपयोग करना चाहिए यदि किसी भी बिंदु पर आप अन्य देशों के उपयोगकर्ताओं / ग्राहकों / ग्राहकों / आदि को शिपिंग या प्राप्त कर रहे हैं।

हालांकि सामान्य मामले में आपको अनुशंसित उत्तर ( printf("%05d", number);) का उपयोग करना चाहिए ।


16

यदि आप एक * NIX मशीन पर हैं:

man 3 printf

यह एक मैनुअल पेज दिखाएगा, जैसे:

0 मान शून्य गद्देदार होना चाहिए। डी, आई, ओ, यू, एक्स, एक्स, ए, ए, ई, ई, एफ, एफ, जी, और जी रूपांतरणों के लिए, परिवर्तित मूल्य रिक्त स्थान के बजाय बाईं ओर शून्य के साथ गद्देदार है। यदि 0 और - दोनों ध्वज दिखाई देते हैं, तो 0 ध्वज को अनदेखा किया जाता है। यदि एक संख्यात्मक रूपांतरण (डी, आई, ओ, यू, एक्स, और एक्स) के साथ एक सटीक दिया जाता है, तो 0 ध्वज को अनदेखा किया जाता है। अन्य रूपांतरणों के लिए, व्यवहार अपरिभाषित है।

भले ही प्रश्न C के लिए हो , लेकिन यह पृष्ठ सहायता का हो सकता है।


1
3 नंबर की आवश्यकता क्यों है?
eri0o

4
@Elric यदि आप manकमांड को एक सांख्यिक तर्क देते हैं , तो यह इसे उस विशेष सेक्शन तक ले जाता है। इसके बिना, आपको printfC फ़ंक्शन के बजाय शेल कमांड के लिए मैन पेज मिलेगा ।
पॉल टॉम्बलिन

14
sprintf(mystring, "%05d", myInt);

यहां, "05" कहता है "अग्रणी शून्य के साथ 5 अंकों का उपयोग करें"।


6

प्रिंटफ विभिन्न प्रारूपण विकल्पों की अनुमति देता है।

उदाहरण के लिए:

printf("leading zeros %05d", 123);

3

यदि आप एक ज़िप कोड को एक वर्ण स्ट्रिंग के रूप में संग्रहीत करते हैं, तो आप खुद को मुसीबत (लंबी अवधि) से बचाएंगे, जो कि एक संख्या के बजाय है, जो यह नहीं है।


यदि केवल कोई समझाता है कि एक चार सरणी को शून्य-पैड कैसे किया जाए। यहां तक ​​कि एक समाधान भी है जो एक सरणी में चार सरणी को चालू करने के लिए अटोई () का उपयोग करता है और फिर% 05d का उपयोग करता है। आशा है कि यह एकमात्र समाधान नहीं है।
निको

0

अधिक लचीला .. यहाँ एक उदाहरण है कि निश्चित चौड़ाई और स्पेस-पेडिंग के साथ सही-सही संख्याओं की पंक्तियों को मुद्रित करना।

//---- Header
std::string getFmt ( int wid, long val )
{  
  char buf[64];
  sprintf ( buf, "% *ld", wid, val );
  return buf;
}
#define FMT (getFmt(8,x).c_str())

//---- Put to use
printf ( "      COUNT     USED     FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );

//-------- Output
      COUNT     USED     FREE
A:      354   148523     3283
B: 54138259 12392759   200391
C:    91239     3281    61423

फ़ंक्शन और मैक्रो डिज़ाइन किए गए हैं ताकि प्रिंटफ़्स अधिक पठनीय हों।


4
मैं मैक्रो के साथ आपके इरादे का 100% निश्चित नहीं हूं, लेकिन ऐसा लगता है कि आप किसी फ़ंक्शन को परिभाषित करने के लिए हैं, जैसे #define FMT(x) (getFmt(8,x).c_str())( x पैरामीटर पर ध्यान दें !), एक चर के विपरीत (जो कि आपका कोड करता है)।
पोंकडूडल

0

यदि आपको किसी वर्ण सरणी zipcode [] में जिपकोड को संग्रहीत करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं:

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.