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


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.