ফাঁকা স্থান সহ বাম-প্যাড প্রিন্টফ f


114

প্রিন্টফ ব্যবহার করার সময় আমি কীভাবে বামদিকে ফাঁকা জায়গায় একটি স্ট্রিং প্যাড করতে পারি?

উদাহরণস্বরূপ, আমি এর আগে 40 টি স্পেস দিয়ে "হ্যালো" মুদ্রণ করতে চাই।

এছাড়াও, আমি যে স্ট্রিংটি মুদ্রণ করতে চাই তাতে একাধিক লাইন রয়েছে। আমার কি প্রতিটি লাইন আলাদাভাবে প্রিন্ট করা দরকার?

সম্পাদনা: পরিষ্কার করে বলতে গেলে, আমি প্রতিটি লাইনের ঠিক আগে 40 টি স্পেস মুদ্রিত করতে চাই।

উত্তর:


125

আপনি যদি "হ্যালো" শব্দটি 40 ক্যারেক্টার প্রস্থের কলামে মুদ্রণ করতে চান তবে ফাঁক দিয়ে বামদিকে ফাঁকা স্থান ব্যবহার করুন।

char *ptr = "Hello";
printf("%40s\n", ptr);

এটি আপনাকে 35 টি স্পেস দেবে, তারপরে "হ্যালো" শব্দটি। আপনি কলামটি কতটা প্রশস্ত করতে চান তা আপনি কীভাবে স্টাট ফর্ম্যাট করেন তবে তথ্য পরিবর্তন হয় (ভাল, আপনি এটি করতে পারেন এটির এক উপায়)।

আপনি যদি জানেন যে আপনি ঠিক 40 টি স্পেস চান তবে কিছু পাঠ্য, কেবল 40 টি ফাঁকা স্থির জায়গায় সংরক্ষণ করুন এবং সেগুলি মুদ্রণ করুন। আপনার যদি একাধিক লাইন মুদ্রণের প্রয়োজন হয়, হয় printfউপরের মত একাধিক বিবৃতি ব্যবহার করুন , বা ptrপ্রতিটি সময়ের মান পরিবর্তন করে একটি লুপে করুন ।


3
ফর্ম্যাট ফ্ল্যাগ সম্পর্কে dunno। তবে আমি প্রিন্টফের সন্দেহ ("% 40s% s \ n", "", পিটিআর); এটি 40 টি স্পেস দিয়ে প্যাড করতে ব্যবহার করা যেতে পারে?
জোহানেস স্কাউব -

হ্যাঁ, এটি সর্বদা আপনাকে পয়েন্টারের বিষয়বস্তুর আগে 40 স্পেস দেয়। এটি একটি দুর্দান্ত সমাধান, তবে আপনার যদি এটি অনেক কিছু করতে হয় তবে আমি মনে করি 40 স্পেস সহ একটি ধ্রুবক দ্রুততর হবে। কম্পাইলার প্রিন্টফ ফর্ম্যাটগুলি অনুকূল করতে সক্ষম কিনা তা আমি জানি না।
বিল করুন

38
এছাড়াও, যদি আপনার অন্তর্গত ভেরিয়েবল 'এন' থাকে যা অন্তর্ভুক্ত করার জন্য স্পেসের সংখ্যা থাকে, আপনি ব্যবহার করতে পারেন: মুদ্রণযোগ্য ("% * s% s \ n", n, "", পিটিআর); স্থানগুলির একটি পরিবর্তনশীল নম্বর পেতে।
জোনাথন লেফলার

এবং, Q- এর শেষ অংশটি সম্বোধন করার জন্য: হ্যাঁ, আপনি যদি চাইলে যে ডাটাগুলির প্রতিটি লাইন 40 টি শীর্ষস্থানীয় স্পেস দিয়ে মুদ্রিত করা হয়, তবে আপনাকে ডেটা ভাগ করা দরকার যাতে প্রতিটি লাইন আলাদাভাবে মুদ্রিত হয়।
জোনাথন লেফলার

4
@ জোনাথন লেফলার: অবশ্যই সংকলক প্রিন্টফ ফর্ম্যাটগুলি অনুকূল করতে পারে। উদাহরণস্বরূপ, জিসি প্রিন্টফকে ("% s \ n", foo) অনুকূল করে এবং এটি প্রতিস্থাপন করে (ফু)।
সাম হোচেভার

73

আমি আমার আউটপুট ইনডেন্ট করতে এই ফাংশনটি ব্যবহার করি (উদাহরণস্বরূপ একটি গাছের কাঠামো মুদ্রণের জন্য)। indentস্ট্রিং আগে স্পেস সংখ্যা।

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}

7
বাকী প্রিন্টফ ফর্ম্যাট থেকে পৃথক করে ইন্ডেন্টেশন আলাদা রাখতে আমি আপনার স্ট্রিং আক্ষরিক সম্মিলন ব্যবহার পছন্দ করি। একটি পরামর্শ: ইনডেন্ট স্ট্রিংয়ের জন্য একটি একক জায়গার পরিবর্তে একটি খালি স্ট্রিং ব্যবহার করুন। এইভাবে ইনডেন্ট == 0 প্রত্যাশার মতো কাজ করবে। (অর্থাত্‍ printf(..., indent, "", ...))
urউরোবুরি

দ্রষ্টব্য, রায় হুলা স্পষ্টতই একটি "সংকলক ইস্যু" ঠিক করার জন্য স্ট্রিং আক্ষরিক যুক্তি মুছে ফেলেছেন।
mwfearnley

42
int space = 40;
printf("%*s", space, "Hello");

এই বিবৃতিটি 40 টি অক্ষরের একটি সারি সংরক্ষণ করবে, সারিটির শেষে প্রিন্ট স্ট্রিং (অতিরিক্ত স্থান সরিয়ে ফেলবে যাতে মোট সারির দৈর্ঘ্য 40 এ স্থির থাকে)। অক্ষর এবং পূর্ণসংখ্যার জন্য একই ব্যবহার করা যেতে পারে:

printf("%*d", space, 10);
printf("%*c", space, 'x');

স্থানগুলি নির্ধারণের জন্য প্যারামিটার ব্যবহার করে এই পদ্ধতিটি দরকারী যেখানে একটি পরিবর্তনশীল সংখ্যক স্পেস প্রয়োজন। এই বিবৃতিগুলি এখনও নীচে পূর্ণসংখ্যার আক্ষরিক সাথে কাজ করবে:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

আশা করি এটি ভবিষ্যতে আমার মতো কাউকে সহায়তা করবে।


আমি পেয়েছিলাম error: empty character constantজন্য ''। এটা করা উচিত নয় ' '?
জিন কোওন

হ্যাঁ, এটা করা উচিত।
shjeff

@ জিনকন যে কোনও চরিত্র, যেমন "Hello"কিছু হতে পারে, তার একটি উদাহরণ ব্যবহার করা উচিত ছিল
জো পেলেটিয়ার

19

আপনি যদি স্ট্রিংয়ের ঠিক আগে 40 টি স্পেস চান তবে আপনার কেবল এটি করা উচিত:

printf("                                        %s\n", myStr );

যদি এটি খুব নোংরা হয় তবে আপনি এটি করতে পারেন (তবে এটি 40 টি স্পেস নিজেই টাইপ করার চেয়ে ধীর হবে): printf("%40s%s", "", myStr );

আপনি যদি চান যে স্ট্রিংটি কলাম 40 এ রেখাযুক্ত করা উচিত (এটির জন্য 39 টি পর্যন্ত স্পেসগুলি এগিয়ে চলুন যাতে ডান দিকের সর্বাধিক অক্ষর 40 কলামে থাকে) তবে এটি করুন: printf("%40s", myStr);

আপনি স্ট্রিংয়ের পরে 40 টি স্পেসও "আপ" রাখতে পারেন: printf("%-40s", myStr);


2
স্ট্রিংয়ের পরে ফাঁকা জায়গাগুলির জন্য এই মন্তব্যটি পছন্দ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.