Printf का उपयोग करके चार कैसे दोहराएं?


79

मैं printf("?", count, char)एक चरित्र countबार दोहराना पसंद करना चाहता हूँ ।

इसे पूरा करने के लिए सही प्रारूप-स्ट्रिंग क्या है?

संपादित करें: हाँ, यह स्पष्ट है कि मैं printf()एक पाश में कॉल कर सकता हूं , लेकिन यह वही है जो मैं बचना चाहता था।


2
आपके मन में कितने थे?
हूज़क्रिग

4
संकलित समय पर गिनती नहीं जानना लूप लिखने के लिए एक बाधा नहीं है।
कीथ थॉम्पसन

आपका प्रश्न यथोचित रूप से स्पष्ट है (और असली उत्तर यह है कि ऐसा कोई printfप्रारूप नहीं है जो आप चाहते हैं), लेकिन आपकी टिप्पणी मुझे अनिश्चित बनाती है कि आप क्या पूछ रहे हैं। आप एक प्रारूप स्ट्रिंग और तर्कों के बारे में बात करते हैं जो आपके फ़ंक्शन में पारित हो रहे हैं। आप किस फंक्शन के बारे में पूछ रहे हैं? ऐसा लगता है कि कुछ चीजें हैं जो आप हमें नहीं बता रहे हैं।
कीथ थॉम्पसन

@KeithThompson मैंने 'Printf' के चारों ओर एक आवरण लिखा है, इसलिए वे तर्क मूल के लिए समान थे, भ्रम के लिए खेद है। और मुझे इस बेहतर की आवश्यकता के कारण का वर्णन करना चाहिए, आप सही हैं।
मुईस

मुझे डर है कि मुझे अभी भी कोई स्पष्ट विचार नहीं है कि आप क्या करने की कोशिश कर रहे हैं, या (@synthesizerpatel के लिए कोई अपराध नहीं) आपने जो जवाब दिया, उसे आपने क्यों स्वीकार किया, जो एक गंभीर समाधान के रूप में नहीं था।
कीथ थॉम्पसन

जवाबों:


63

संक्षिप्त उत्तर - हां, लंबा उत्तर: आप इसे कैसे चाहते हैं।

आप प्रिंट * के% * रूप का उपयोग कर सकते हैं , जो एक चर चौड़ाई को स्वीकार करता है। और, यदि आप '0' को प्रिंट करने के लिए अपने मान के रूप में उपयोग करते हैं, तो दाएं-संरेखित पाठ के साथ संयुक्त है जो बाईं ओर शून्य गद्देदार है।

उत्पादन:

अपनी जीभ को मजबूती से मेरे गाल में लगाए, मैं कोड के इस छोटे से हॉरर-शो स्निपेट की पेशकश करता हूं।

कुछ समय के लिए आप चीजों को बुरी तरह से याद करते हैं कि आप बाकी समय में इतनी मेहनत क्यों करते हैं।


3
मुझे स्पष्ट रूप से याद नहीं है कि मैं क्या सोच रहा था, लेकिन आपके कोड में ऊपरी सीमा है 4096। मुझे लगता है कि आप mallocबफर कर सकते हैं ।
कीथ थॉम्पसन

2
काफी उचित। चाकू-लड़ाई == टालमटोल!
सिंथेसाइजरपटेल

4
यह शैली लूप में सीधे चार असाइन करने की तुलना में उठी है।
liuyang1 11

2
हां। यह विधि बहुत ही भयानक है, लेकिन यह ओपीएस प्रश्न का उत्तर देती है।
सिंथेसाइजरपटेल

2
क्या आप स्पष्ट कर सकते हैं कि हॉरर-शो से आपका क्या मतलब है? मुझे लगता है कि आप किसी चीज़ के खिलाफ चेतावनी देने की कोशिश कर रहे हैं, लेकिन मुझे यकीन नहीं है कि क्या ... क्या आप "% *" का उपयोग करते समय अतिप्रवाह के खतरे को इंगित करने की कोशिश कर रहे हैं?
चेशायरकोव

117

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

यह प्रिंट करेगा "=====" यह मेरे लिए विजुअल स्टूडियो पर काम करता है, किसी भी कारण से यह सभी सी कंपाइलरों पर काम नहीं करना चाहिए।


3
यह दुर्भाग्यपूर्ण है कि यह उत्तर उच्च श्रेणी का नहीं माना जाता है क्योंकि यह न केवल सही है बल्कि क्रॉस-प्लेटफॉर्म पर काम करता है। OSX, Linux और OpenBSD पर C के साथ-साथ पर्ल (जो C Printf anywho को लपेट रहा है) पर परीक्षण किया गया है
सिंथेसाइजरपैटल

3
धन्यवाद, मुझे यह 10 साल पहले करना याद था, लेकिन इसे भूल गया और फिर इसे फिर से खोज लिया।
rep_movsd

19
यह बिल्कुल लचीली थियो नहीं है ’। यदि चौड़ाई स्ट्रिंग से बड़ी है, तो यह स्ट्रिंग से अधिक प्रिंट नहीं करेगा (कम से कम gcc के साथ मेरे सरल प्रयोग में नहीं)।
मैट पीटरसन

1
यह सिंथेसाइजरपटेल के जवाब से बेहतर काम करता है। जब मैंने शून्य के बजाय अंतरिक्ष की कोशिश की और चौड़ाई शून्य है, तब भी एक ही स्थान प्रिंट करता है। यह एक नहीं है।
काला

1
अच्छा पकड़ा! @rep_movsd
जुआन डिएगो

24

यदि आप अपने आप को एक 0 या एक स्थान को दोहराने के लिए सीमित करते हैं जो आप कर सकते हैं:

रिक्त स्थान के लिए:

शून्य के लिए:


17

C ++ में आप दोहराया वर्ण पाने के लिए std :: string का उपयोग कर सकते हैं

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

उत्पादन:


18
प्रश्न C के बारे में था, C ++ के बारे में नहीं।
कीथ थॉम्पसन

9
हालांकि यह कड़ाई से सी नहीं है, इससे मुझे मदद मिली। धन्यवाद
स्वचालित यह


12

ऐसा कुछ नहीं है। आपको या तो एक लूप का उपयोग करना होगा printfया putsएक फ़ंक्शन लिखना होगा, जो स्ट्रिंग की गिनती को एक नए स्ट्रिंग में कॉपी करता है।


2
बहुत अजीब है कि मेरे पास सबसे जटिल अभिव्यक्ति हो सकती है, लेकिन एक चरित्र को दोहराते हुए कुछ सरल का समर्थन नहीं किया जाता है।
मूइस

क्यों? आप इसे केवल एक लूप जोड़कर कर सकते हैं जिसे आप दोहराना चाहते हैं। अधिकांश प्रिंटफ ऐसी चीजें हैं जो आप अपने कोड में नहीं कर सकते हैं [बहुत आसानी से]। पुस्तकालयों को कठिन हिस्सा करते हैं, और आवेदन कार्यक्रम आसान भागों को करते हैं, मुझे लगता है कि यहां विषय है।
मैट पीटर्सन

5
और यदि आप इसके बारे में दृढ़ता से महसूस करते हैं, तो मुझे लगता है कि सी मानक समिति में सुधार के लिए सुझावों में रुचि है, और ग्लिबक के अंदर एक नमूना कार्यान्वयन शायद कभी भी मानक बनने की संभावनाओं में सुधार करेगा। यदि आप इसे लागू करते हैं, तो शायद कोई और इसे एक अच्छा विचार समझेगा। यह केवल पिछले 50 वर्षों से गायब है या इसलिए जब से printf को पहली बार पेश किया गया था, तो यह शायद सिर्फ एक ओवरसाइट है ...)
मैट पीटर्सन

@MatsPetersson Thats कोई समाधान नहीं है, क्योंकि मुझे पहले से प्रारूप स्ट्रिंग नहीं पता है, मोकम्मल के लिए मेरी प्रतिक्रिया देखें।
मूइस

3
इसे क्यों ख़राब किया जा रहा है - यदि आप इस उत्तर को गलत ठहरा रहे हैं, तो कृपया मुझे बताएं कि यह क्या है जिससे आप नाखुश हैं ...
मैट पीटरसन

6

printfऐसा नहीं करता है - और printfएकल चरित्र को प्रिंट करने के लिए ओवरकिल है।

यह अक्षम होने के बारे में चिंता मत करो; putchar()इसका आउटपुट बफ़र्स करता है, इसलिए यह प्रत्येक वर्ण के लिए एक भौतिक आउटपुट ऑपरेशन नहीं करेगा जब तक कि इसे करने की आवश्यकता न हो।


मुझे पता नहीं है कि प्रारूप-स्ट्रिंग या तर्क जो मेरे कार्य में पारित हो जाएंगे, उन्हें एक xml- फाइल से पढ़ा जा सकता है या उपयोगकर्ता-इनपुट हो सकता है।
Muis

आपके पास चरित्र और कितनी बार आपको इसे प्रिंट करने की आवश्यकता है, है ना? आपको और क्या जानकारी चाहिए? किसी एकल वर्ण को मुद्रित करने के लिए printf, प्रारूप स्ट्रिंग है "%c"। लेकिन आपको उपयोग करने की आवश्यकता नहीं है printf, और उस स्थिति में आपको प्रारूप स्ट्रिंग की आवश्यकता नहीं है। (बस कोई printfप्रारूप स्ट्रिंग नहीं है जो एक चरित्र को कई बार प्रिंट करेगा, लेकिन कार्य को पूरा करने के अन्य और बेहतर तरीके हैं।)
कीथ थॉम्पसन

जैसा मैंने कहा, मुझे नहीं पता कि मेरे कार्य के तर्क क्या दर्शाते हैं। मान लीजिए कि मैं XML फ़ाइल से प्रारूप-स्ट्रिंग और तर्क पढ़ता हूं, और उन्हें प्रिंटफ () पर पास करता हूं, तो मेरे कार्य को कैसे पता चलेगा कि उसे लूप करने की आवश्यकता है और दूसरा तर्क एक गिनती का प्रतिनिधित्व करता है? इसका मतलब यह है कि मेरे इनपुट का संकलन-समय पर पता नहीं है।
मूइस

4
@ जोशुआ: किस कार्य के लिए तर्क ? आपके प्रश्न में किसी फ़ंक्शन का उल्लेख नहीं है।
कीथ थॉम्पसन

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

6

यदि आपके पास एक कंपाइलर है जो एलोका () फ़ंक्शन का समर्थन करता है, तो यह संभव समाधान है (हालांकि बहुत बदसूरत):

यह मूल रूप से स्टैक पर 10 बाइट्स आवंटित करता है जो '\ 0' से भरे होते हैं और फिर पहले 9 बाइट्स 'x' से भरे जाते हैं।

यदि आपके पास एक C99 संकलक है, तो यह एक शून्य समाधान हो सकता है:


4
मैं putchar('x')इसके बजाय सुझाव देना चाहूंगा printf("%c", 'x')
पड्डू

क्यों? क्या निष्पादन का समय कम है?
71GA


2

आप एक कार्य कर सकते हैं जो यह काम करता है और इसका उपयोग करता है

यह आउटपुट करेगा


2
पुटचर () दोहराने के लिए एक बेहतर फिट होगा () लूप
rsaxvc

वास्तव में, लेकिन मैंने किसी भी एंट्री-लेवल कोडर के लिए अपने कोड को बहुत बुनियादी बनाने की कोशिश की है
लोए हुसैन

उपयोग करना बेहतर होगा i < count। अन्यथा गिनती के लिए एक नकारात्मक इनपुट के परिणामस्वरूप बहुत सारे अवांछित प्रिंट हो सकते हैं।
ワ き ん ワ

1

n<= sizeof(buffer)[शायद n <2 ^ 16]

हालाँकि puts(buffer)आशावादी इसे बदल सकता है और फिर EoS की कमी .....

और धारणा यह है कि मेमसेट एक असेंबली इंस्ट्रक्शन है (लेकिन फिर भी यह चिप पर एक लूप होना चाहिए)।

कड़ाई से देखा गया है कि आपको कोई समाधान नहीं दिया गया है, जिसमें आपको 'नो लूप' कहा गया है।


0

-2

मुझे लगता है कि ऐसा कुछ करना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.