2008-09-30 16 views
236

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

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

उत्तर

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

+161

कृपया संख्या के रूप में zipcodes की दुकान नहीं है। कुछ देशों में उनके ज़िप कोड में अक्षर हैं। – Sec

7

printf विभिन्न स्वरूपण विकल्प की अनुमति देता है।

पूर्व:

printf("%05d",zipcode); 
40

आप कम से कम क्षेत्र चौड़ाई से पहले एक शून्य जगह मैनुअल पेज, जैसा कि:

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

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

14

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

man 3 printf 

यह एक दिखाएगा

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

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

+1

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

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

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

138

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

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

+19

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

+11

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

+1

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

16

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

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

3

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

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 

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

+2

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

0

आप एक चरित्र सरणी ज़िपकोड [] में ज़िपकोड स्टोर करने के लिए की जरूरत है, तो आप इस का उपयोग कर सकते हैं:

snprintf(zipcode, 6, "%05.5d", atoi(zipcode)); 
संबंधित मुद्दे