gets(string) এবং scanf(" % [^\n]", string) এর মধ্যে পার্থক্য কী ? কোনটি কখন ব্যবহার করব ?

উল্লেখ্য,

while (test_kase--){
    gets(string);
}

ব্যবহার করে ইনপুট নিতে সমস্যা হয় (টেস্ট কেসকে স্ট্রিং হিসেবে নেয়)।

কিন্তু

while (test_kase--){
    scanf(" % [^\n]", string);
}

ব্যবহার করলে কোন সমস্যা হয় না।

asked 24 Apr, 03:48

AH%20Kamal's gravatar image

AH Kamal
213

edited 29 Apr, 16:47

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618


gets(string)

এর মাধ্যমে আপনি মূলত একটা স্ট্রিং-কে ইনপুট হিসেবে নিতে চাচ্ছেন। টেস্টকেস স্ক্যান করার পর আপনি যে (ENTER) প্রেস করছেন ইনপুট নেবার সময় কম্পাইলার সেটাকেও একটা ইনপুট হিসেবে নিয়ে নিচ্ছে। এজন্যে আপনার যতগুলো টেস্টকেস তার চাইতে একটা কম ইনপুট নিতে পারছেন। এই ঝামেলা দূর করার জন্য টেস্ট কেস স্ক্যান করার পরপরই

getchar();

ব্যবহার করুন। তাহলে ঠিকঠাক ভাবে সবগুলো ইনপুট নিতে পারবেন।

scanf(" % [^\n]", string);

এটা আসলে একটা রেগুলার এক্সপ্রেশন ইনপুট গ্রহণ সিস্টেম যেটা দিয়ে আপনি পুরো লাইন স্ট্রিং হিসেবে নিতে পারবেন । যেটা এক্ষেত্রে ফরমেটেড ইনপুট নেবার ক্ষেত্রে ব্যবহার করা হয়। এই পুরো জিনিসটা মানে হল -

  • %[] এটার মানে হল আপনি ইনপুট হিসেবে কিছু ক্যারেক্টার স্ক্যান করবেন।
  • ৩য় বন্ধনীর ভেতরে ^ এই চিহ্নটা না-বোধক চিহ্ন (আসলে একটা অপারেটর)।
  • '^\n' মানে হচ্ছে আপনি আপনার কম্পাইলার কে নির্দেষ দিচ্ছেন '\n' ছাড়া বাকি সব ক্যারেক্টার ইনপুট নিতে। সোজা ভাষায় একদম লাইনের শেষ মানে End Of Line হিসেবে ইনপুট নিতে বলছেন ।

আশা করি এটুকুই যথেষ্ট হবে।

permanent link

answered 25 Apr, 03:56

ssavi's gravatar image

ssavi
842

edited 25 Apr, 04:46

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618

Soummyo Sarkar Avik ভাইয়া --এত তারাতারি উত্তর পাব আশা করিনি । অসংখ্য ধন্যবাদ... কিন্তু আমি কিভাবে বুঝব কোন সময় gets(string); এবং scanf(" % [^\n]", string); ব্যবহার উত্তম ? আবার getchar(); ব্যবহার করতে হবে এটা কিভাবে বুঝব (প্রোগ্রাম না চালিয়ে) ?

(25 Apr, 04:19) AH Kamal
1
  • gets() আসলে ব্যবহার করাই ঠিক না। ২০১১ সালে ANSI এটা স্ট্যান্ডার্ড লাইব্রেরি থেকে বাদ দিয়েছে।
  • scanf() এর পর যদি gets() থাকে তো gets()-এর আগে getchar() বসাতে হবে।
(25 Apr, 04:43) Mosharraf Hosain ♦

ANSI স্ট্যান্ডার্ড লাইব্রেরি থেকে gets(); বাদ দিয়েছে, জানতাম না । ধন্যবাদ...

(25 Apr, 05:16) AH Kamal

আপনার উত্তর পেয়ে গেলে এটাকে সঠিক উত্তর হিসেবে চিহ্নিত করুন যাতে অন্যরা বুঝতে পারে এই প্রশ্নের সঠিক উত্তর আছে।

@AH Kamal

(26 Apr, 08:32) Ashfaqur Rahman

@AH Kamal gets() ব্যবহার করাটা ঠিক কতটা ফলপ্রসু হবে কিংবা আপনি ঠিক কতটা ঠিক ভাবে সেটাকে ব্যবহার করতে পারছেন বলতে পারছি না। তবে এর বিকল্প হিসেবে আপনি দুইটা জিনিস ব্যবহার করতে পারেন ।

১) C++ এ getline() কমান্ড ব্যবহার করতে পারেন। (আপনি এটার কথা জানেন না। ব্যপার না শিখে নেবেন। শেখা তো এভাবেই হয়)। Link: http://www.cplusplus.com/reference/string/string/getline/

২) getchar_unlocked() কি-ওয়ার্ড ব্যবহার করে scanf() কে কাস্টমাইজ করে একটা লাইন ইনপুট নেবার জন্য ব্যবহার করতে পারেন। Link: https://paste.ubuntu.com/p/GsgTF5MJnx/ এক্ষেত্রে শুধু input() কল করলেই ইনপুট নিতে পারবেন যেকোন ডাটা টাইপ এর।

~TIA

(04 May, 03:53) ssavi
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×374

question asked: 24 Apr, 03:48

question was seen: 152 times

last updated: 04 May, 03:53