मैं printf("?", count, char)
एक चरित्र count
बार दोहराना पसंद करना चाहता हूँ ।
इसे पूरा करने के लिए सही प्रारूप-स्ट्रिंग क्या है?
संपादित करें: हाँ, यह स्पष्ट है कि मैं printf()
एक पाश में कॉल कर सकता हूं , लेकिन यह वही है जो मैं बचना चाहता था।
मैं printf("?", count, char)
एक चरित्र count
बार दोहराना पसंद करना चाहता हूँ ।
इसे पूरा करने के लिए सही प्रारूप-स्ट्रिंग क्या है?
संपादित करें: हाँ, यह स्पष्ट है कि मैं printf()
एक पाश में कॉल कर सकता हूं , लेकिन यह वही है जो मैं बचना चाहता था।
printf
प्रारूप नहीं है जो आप चाहते हैं), लेकिन आपकी टिप्पणी मुझे अनिश्चित बनाती है कि आप क्या पूछ रहे हैं। आप एक प्रारूप स्ट्रिंग और तर्कों के बारे में बात करते हैं जो आपके फ़ंक्शन में पारित हो रहे हैं। आप किस फंक्शन के बारे में पूछ रहे हैं? ऐसा लगता है कि कुछ चीजें हैं जो आप हमें नहीं बता रहे हैं।
जवाबों:
संक्षिप्त उत्तर - हां, लंबा उत्तर: आप इसे कैसे चाहते हैं।
आप प्रिंट * के% * रूप का उपयोग कर सकते हैं , जो एक चर चौड़ाई को स्वीकार करता है। और, यदि आप '0' को प्रिंट करने के लिए अपने मान के रूप में उपयोग करते हैं, तो दाएं-संरेखित पाठ के साथ संयुक्त है जो बाईं ओर शून्य गद्देदार है।
printf("%0*d\n", 20, 0);
उत्पादन:
00000000000000000000
अपनी जीभ को मजबूती से मेरे गाल में लगाए, मैं कोड के इस छोटे से हॉरर-शो स्निपेट की पेशकश करता हूं।
कुछ समय के लिए आप चीजों को बुरी तरह से याद करते हैं कि आप बाकी समय में इतनी मेहनत क्यों करते हैं।
#include <stdio.h>
int width = 20;
char buf[4096];
void subst(char *s, char from, char to) {
while (*s == from)
*s++ = to;
}
int main() {
sprintf(buf, "%0*d", width, 0);
subst(buf, '0', '-');
printf("%s\n", buf);
return 0;
}
4096
। मुझे लगता है कि आप malloc
बफर कर सकते हैं ।
आप निम्नलिखित तकनीक का उपयोग कर सकते हैं:
printf("%.*s", 5, "=================");
यह प्रिंट करेगा "====="
यह मेरे लिए विजुअल स्टूडियो पर काम करता है, किसी भी कारण से यह सभी सी कंपाइलरों पर काम नहीं करना चाहिए।
C ++ में आप दोहराया वर्ण पाने के लिए std :: string का उपयोग कर सकते हैं
printf("%s",std::string(count,char).c_str());
उदाहरण के लिए:
printf("%s",std::string(5,'a').c_str());
उत्पादन:
aaaaa
ऐसा कुछ नहीं है। आपको या तो एक लूप का उपयोग करना होगा printf
या puts
एक फ़ंक्शन लिखना होगा, जो स्ट्रिंग की गिनती को एक नए स्ट्रिंग में कॉपी करता है।
printf
ऐसा नहीं करता है - और printf
एकल चरित्र को प्रिंट करने के लिए ओवरकिल है।
char c = '*';
int count = 42;
for (i = 0; i < count; i ++) {
putchar(c);
}
यह अक्षम होने के बारे में चिंता मत करो; putchar()
इसका आउटपुट बफ़र्स करता है, इसलिए यह प्रत्येक वर्ण के लिए एक भौतिक आउटपुट ऑपरेशन नहीं करेगा जब तक कि इसे करने की आवश्यकता न हो।
printf
, प्रारूप स्ट्रिंग है "%c"
। लेकिन आपको उपयोग करने की आवश्यकता नहीं है printf
, और उस स्थिति में आपको प्रारूप स्ट्रिंग की आवश्यकता नहीं है। (बस कोई printf
प्रारूप स्ट्रिंग नहीं है जो एक चरित्र को कई बार प्रिंट करेगा, लेकिन कार्य को पूरा करने के अन्य और बेहतर तरीके हैं।)
यदि आपके पास एक कंपाइलर है जो एलोका () फ़ंक्शन का समर्थन करता है, तो यह संभव समाधान है (हालांकि बहुत बदसूरत):
printf("%s", (char*)memset(memset(alloca(10), '\0', 10), 'x', 9));
यह मूल रूप से स्टैक पर 10 बाइट्स आवंटित करता है जो '\ 0' से भरे होते हैं और फिर पहले 9 बाइट्स 'x' से भरे जाते हैं।
यदि आपके पास एक C99 संकलक है, तो यह एक शून्य समाधान हो सकता है:
for (int i = 0; i < 10; i++, printf("%c", 'x'));
putchar('x')
इसके बजाय सुझाव देना चाहूंगा printf("%c", 'x')
।
#include <stdio.h>
#include <string.h>
void repeat_char(unsigned int cnt, char ch) {
char buffer[cnt + 1];
/*assuming you want to repeat the c character 30 times*/
memset(buffer,ch,cnd); buffer[cnt]='\0';
printf("%s",buffer)
}
आप एक कार्य कर सकते हैं जो यह काम करता है और इसका उपयोग करता है
#include <stdio.h>
void repeat (char input , int count )
{
for (int i=0; i != count; i++ )
{
printf("%c", input);
}
}
int main()
{
repeat ('#', 5);
return 0;
}
यह आउटपुट करेगा
#####
i < count
। अन्यथा गिनती के लिए एक नकारात्मक इनपुट के परिणामस्वरूप बहुत सारे अवांछित प्रिंट हो सकते हैं।
printf("%.*s\n",n,(char *) memset(buffer,c,n));
n
<= sizeof(buffer)
[शायद n <2 ^ 16]
हालाँकि puts(buffer)
आशावादी इसे बदल सकता है और फिर EoS की कमी .....
और धारणा यह है कि मेमसेट एक असेंबली इंस्ट्रक्शन है (लेकिन फिर भी यह चिप पर एक लूप होना चाहिए)।
कड़ाई से देखा गया है कि आपको कोई समाधान नहीं दिया गया है, जिसमें आपको 'नो लूप' कहा गया है।