সি এর প্রিন্টফায় কীভাবে% (শতাংশ) সাইন ইন করবেন?


274

printfসিতে ব্যবহার করার সময় আপনি কীভাবে% চিহ্নটি থেকে বাঁচবেন?

printf("hello\%"); /* not like this */

উত্তর:


421

আপনি এর মতো একটি ডাবল '%' পোস্ট করে এড়াতে পারবেন: %%

আপনার উদাহরণ ব্যবহার করে:

printf("hello%%");

'%' চিহ্নটি ত্যাগ করা কেবল প্রিন্টফের জন্য। যদি তুমি করো:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

এটি মুদ্রণ করবে: This is a's value: %%


8
"printf (" ওহে %% ");" সঠিক. তবে এটি পালানোর বিষয়টি আমার মনে হয় না। প্রিন্টফ ব্যবহার করুন ("হ্যালো \ 045");
— লাই জিয়াংসান

1
@ পাবলো সান্তা ক্রুজ: "পালাতে" এই পদ্ধতিটি %নির্দিষ্ট printf, সঠিক?
— লাজার

10
এটি পালানোর সিস্টেমে খুব সাধারণ নিয়মের একটি বিশেষ ঘটনা যা আপনি <পলায়ন প্রতীক> <অব্যাহতি প্রতীক> ব্যবহার করে আক্ষরিক পালানোর প্রতীক পেতে।
— ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

12
লাই জিয়াংসান, এটি কাজ করবে না। \045সংকলন-সময় অবলম্বন যা ভাষার অংশ এবং সংকলনের সময় রূপান্তরিত হয় %। printfরান-টাইম ফাংশন, সুতরাং এটি আপনার স্ট্রিংয়ের বাইটগুলি নিয়ে কাজ করে, সি উত্স কোডের সাথে নয় এবং এর নিজস্ব পালানোর ক্রম রয়েছে যা ফাংশনের অংশ । সংক্ষেপে, printfএটি একটি "ভাষার ভিতরে ভাষা", এবং printf("This is a's value: %s\n", a);একই ফলাফল দেয় printf("This is a's value: \045\0163\012", a);।
— ত্রিআং

5
এছাড়াও, আপনি এটা করতে পারেন: printf("hello%c", '%');। তবে %%এটি আরও ভাল কারণ এটি অন্য যুক্তি ব্যবহার করে না।
— ত্রিআং

36

অন্যরা যেমন বলেছে, %%% পালাতে পারবেন।

তবে মনে রাখবেন যে আপনার কখনই এটি করা উচিত নয়:

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

যখনই আপনাকে কোনও স্ট্রিং মুদ্রণ করতে হবে, সর্বদা, সর্বদা, সর্বদা এটি ব্যবহার করে মুদ্রণ করুন

printf("%s", c)

এম্বেড থাকা% কে সমস্যা সৃষ্টি করতে [মেমোরি লঙ্ঘন, সেগফল্ট ইত্যাদি] রোধ করতে


সতর্কতাটি সাধারণত যথাযথ হয় তবে এমন পরিস্থিতিতেও থাকতে পারে যেখানে আপনি "এটি" করতে চান - যতক্ষণ না আপনি জানেন যে আপনার সরবরাহ করা স্ট্রিংটি বিন্যাসের স্ট্রিং হিসাবে ব্যাখ্যা করা হবে।
— পিপি

2
আমি একবার বিকল্প সমাধান নিয়ে এসেছি - বাফারটিকে অন্য একটি বাফারে অনুলিপি করুন এবং তারপরে% চিহ্নগুলি দ্বিগুণ করে দিন। আমি অবশেষে এই ধারণাটি জুড়ে এসে 20-30 লাইনের ফাংশনটিকে এক লাইনের সাথে প্রতিস্থাপন করেছি। চিন্তা করবেন না, আমি নিজের মতো করে নিজেকে মাথা থেকে মারলাম the
— গ্রীম পেরো 14

সত্য, তবে ভুলে যাবেন না যে আপনি যখন ফর্ম্যাট স্ট্রিং পাবেন তখন 99% সময় আপনি একটি ভিএলিস্ট হিসাবে আর্গুমেন্ট পাবেন, সুতরাং আপনাকে ভিপ্রিন্টফ ব্যবহার করা দরকার। সুতরাং, আমি প্রযুক্তিগতভাবে সঠিক;)
— মাইকেজ

2
পুট করা (গ) করা এত সহজ। যদি
— উইলিয়াম পার্সেল 14

1
একটি নতুন লাইন সংযোজন। এটি প্রায়শই অযাচিত আচরণ।
— মাইকেজ

33

স্ট্রিংয়ে কোনও ফর্ম্যাট না থাকলে আপনি puts(বা fputs) ব্যবহার করতে পারেন :

puts("hello%");

যদি স্ট্রিংয়ে কোনও ফর্ম্যাট থাকে:

printf("%.2f%%", 53.2);

হিসাবে মন্তব্য উল্লেখ করা হয়েছে, putsএকটি appends \nআউটপুট এবং fputsনা।


4
উল্লেখযোগ্য fputs () এছাড়াও, যেমন এটি সরাসরি fprintf () এর প্রতিদান দেয়।
— টিম পোস্ট

1
এছাড়াও একটি নতুন লাইন সংযোজন করে [এমনকি আপনার যদি ইতিমধ্যে একটি থাকে]। আপনি যদি এটি চান, দুর্দান্ত। অন্যথায় ...
— মাইকেজ

@ সিনান আনার: আমাকে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ puts। আমি কখনও putsস্ট্রিং মুদ্রণের জন্য ভাবি নি এবং সরাসরি লাফিয়ে উঠি printf। আর না.
— Lazer


7

নিতপিক:
আপনি কার্যত (এবং ) ফাংশনটির %ফর্ম্যাটটি নির্দিষ্ট করে এমন স্ট্রিংটিতে পালাতে পারবেন না ।printf()scanf()

%এ printf()(এবং scanf()) ফাংশন পরিবার, একটি রূপান্তর স্পেসিফিকেশন শুরু হয়। রূপান্তরকরণের নির্দিষ্টকরণের নিয়মের একটিতে বলা হয়েছে যে একটি রূপান্তর নির্দিষ্টকরণকারী %হিসাবে (অবিলম্বে নিম্নলিখিতটি রূপান্তরকরণের নির্দিষ্টকরণটি অনুসরণ করে %) কোনও '%'অক্ষর রূপান্তরিত না করে একটি চরিত্রকে রচনার কারণ করে ।

স্ট্রিং সত্যিই 2 আছে '%'(: যেমন অক্ষর পলায়নের উল্টোদিকে ভিতরে অক্ষর "a\bc"; 3 অ নাল অক্ষর একটি স্ট্রিং "a%%b"4 অ নাল অক্ষর একটি স্ট্রিং)।


2
প্রযুক্তিগতভাবে, এটি এখনও "পলায়ন"; যে চরিত্রগুলি বিশেষত তাদের বিশেষ অর্থ "পালাতে" এবং তাদের "চরিত্রের প্রকৃতির" কাছে ফিরে আসার জন্য একটি উপায় প্রয়োজন
— শিনটেকজৌ



3

সি তে ব্যাকস্ল্যাশ স্ট্রিংগুলিতে অক্ষরগুলি এড়াতে ব্যবহৃত হয়। স্ট্রিংস% কে একটি বিশেষ চরিত্র হিসাবে স্বীকৃতি জানায় না, এবং তাই কোনও পালানোর প্রয়োজন হবে না। প্রিন্টফ আরেকটি বিষয়: এক% মুদ্রণের জন্য %% ব্যবহার করুন।




2

হ্যাঁ, প্রিন্টফ ব্যবহার করুন ("হ্যালো %%"); এবং এটি সম্পন্ন হয়েছে।



1

ডবল '%' এ কাজ করে ".Format (...) উদাহরণ (iDrawApertureMask == 0.05 সঙ্গে 87, fCornerRadMask ==।): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; (ইন স্ট্রিং বস্তুর তালিকা) আকাঙ্ক্ষিত ও প্রত্যাশিত মান csCurrentLine দেয়;"% ADD87C, 0,0500 *% "

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