सी में "अहस्ताक्षरित लंबे" प्रिंट कैसे करें?


344

मैं कभी नहीं समझ सकता कि unsigned longसी में डेटाटाइप कैसे प्रिंट करें ।

मान लीजिए unsigned_fooएक है unsigned long, तो मैं कोशिश करता हूं:

  • printf("%lu\n", unsigned_foo)
  • printf("%du\n", unsigned_foo)
  • printf("%ud\n", unsigned_foo)
  • printf("%ll\n", unsigned_foo)
  • printf("%ld\n", unsigned_foo)
  • printf("%dl\n", unsigned_foo)

और उन सभी के पास मेरे -123123123बजाय किसी तरह का नंबर प्रिंट unsigned longहोता है।

जवाबों:


499

%luके लिए सही प्रारूप है unsigned long। लगता है जैसे कि यहां अन्य मुद्दे हैं, जैसे कि स्मृति भ्रष्टाचार या एक अनधिकृत चर। शायद हमें एक बड़ी तस्वीर दिखाते हैं?


12
उफ़, %luइस समय काम किया। धन्यवाद। पहले कुछ और हुआ होगा और यह काम नहीं किया।
बोडैसिडो

1
@bodacydo: यदि आपको एक बग मिला है, तो यह अर्ध-यादृच्छिक रूप में दिखाई दे सकता है ... सुनिश्चित करें कि आपके चर को प्रिंट करने का प्रयास करने से पहले आपके मान्य मान हैं।
थानाटोस

1
यहां तक ​​कि अगर चर uninitialized है, तो कोई रास्ता नहीं होना चाहिए प्रिंटफ एक बिंदु तक पहुंचता है जहां यह प्रारूप निर्दिष्ट होने पर माइनस साइन प्रिंट कर सकता है %lu। तकनीकी रूप से यह अपरिभाषित व्यवहार है लेकिन वास्तव में चर का एक अप्रत्याशित मूल्य होता है जो प्रिंटफ को पास हो जाता है जो प्रिंटफ फिर अप्रकाशित के रूप में व्याख्या करता है। मैं अनुमान लगा रहा हूँ कि बोडैसिडो की मूल समस्या फ्लो के बजाय एक गलत प्रिंटफ कॉल तक पहुँच रही थी ...
R .. GitHub STOP HELPING ICE

8
@ अनिशा कौल:% l एक वैध रूपांतरण विनिर्देश है,% ul नहीं है। %lu, बाहर टूट गया है: %- "रूपांतरण विनिर्देश" शुरू करता है; l- लंबाई संशोधक, का lअर्थ है "[अहस्ताक्षरित] लंबे समय तक इंट"; u- रूपांतरण विनिर्देशक है, uएक के लिए है unsigned intदशमलव के रूप में बाहर मुद्रित करने के लिए। क्योंकि हमने लंबाई संशोधक दी है l, यह तब स्वीकार करता है a unsigned long int। अक्षरों को उस क्रम में होना चाहिए: प्रतिशत, लंबाई, रूपांतरण। (कुछ और विकल्प हैं, जैसे कि चौड़ाई और सटीकता, जिसे आप जोड़ सकते हैं। मैन पेज देखें , क्योंकि यह सब ठीक दस्तावेज है!)
थानातोस

1
% ul केवल अहस्ताक्षरित (% u के साथ) प्रिंट करेगा, और फिर अक्षर "l" शब्दशः। जैसे "% uw" बिना प्रिंट किया हुआ होगा, उसके बाद अक्षर "w" होगा। %, शुरू होता है, यू (या कुछ अन्य वर्ण, जैसे डी, एस, सी ...) इसे समाप्त करता है।
वेकी

30
  • %luलंबे समय के लिए अहस्ताक्षरित
  • %lluलंबे समय के लिए अहस्ताक्षरित

13
Yoda सम्मेलन: "अहस्ताक्षरित लंबा" "(l) ong (u) nsigned" है।
Reb.Cabin

28

के लिए पूर्णांक %d

के लिए लंबे समय तक पूर्णांक %ld

के लिए लंबे पूर्णांक %lld

के लिए अहस्ताक्षरित लंबे int %llu


23

आपके द्वारा आजमाए गए सभी संयोजनों में से, %ldऔर %luकेवल वही हैं जो सभी में मान्य प्रिंटफ प्रारूप विनिर्देशक हैं। %lu(लंबे अहस्ताक्षरित दशमलव), %lxया %lX(लोअरकेस या अपरकेस अक्षरों के साथ लंबे हेक्स), और %lo(लंबे अष्टक) बिना किसी प्रकार के लंबे समय के वैरिएबल के लिए एकमात्र मान्य प्रारूप विनिर्देशक हैं (बेशक आप फ़ील्ड की चौड़ाई, सटीकता, आदि जोड़ सकते हैं) %और l)।


1
% ld तब तक ठीक काम करेगा जब तक कि std :: num_limits <unsign long> :: max () / 2। इसके ऊपर% ld गलत मान (ऋणात्मक मान) प्रिंट करेगा।
कौशिक आचार्य

1
@ कौशिकचार्य: नहीं, ऊपर यह यूबी है। और यह यकीनन इससे पहले भी यूबी है, क्योंकि printfबिना भत्ते के सटीक सटीक तर्क प्रकारों की आवश्यकता के लिए निर्दिष्ट किया गया va_argहै।
आर .. गिटहब स्टॉप हेल्पिंग ICE


9

प्रारूप है %lu

कृपया यहां प्रिंट में विभिन्न अन्य डेटाटाइप्स और उनके उपयोग के बारे में जांचें


2
गैर-मानक के रूप में चिह्नित किए बिना विभिन्न अमानवीय व्यवहार का दस्तावेजीकरण किया जाता है। POSIX प्रिंटफ के लिए सबसे आसान से ऑनलाइन एक्सेस मानक है; ISO C से आगे के एक्सटेंशन "CX" टैग के साथ चिह्नित हैं: opengroup.org/onlinepubs/9699919799/functions/fprintf.html
R .. GitHub STOP

8

अहस्ताक्षरित लंबे के लिए सही विनिर्देश है %lu

यदि आपको वह सटीक मान नहीं मिल रहा है जिसकी आप अपेक्षा कर रहे हैं तो आपके कोड में कुछ समस्याएं हो सकती हैं।

कृपया यहाँ अपना कोड कॉपी करें। तब शायद कोई आपको बेहतर बता सकता है कि समस्या क्या है।


-5

मुझे भी यही समस्या थी। "% उल" का प्रयास करें, यह मेरे लिए काम करता है।


6
इस सवाल का बड़े पैमाने पर 8 साल पहले जवाब दिया गया था। याचिका सुनिश्चित करती है कि एक नया उत्तर नई जानकारी जोड़ता है और अधिक महत्वपूर्ण भी सही है।
गेरहार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.