অনেক code "while(~scanf("%lf%lf%lf",&n,&a,&b)" এইটা দেখা যায় । এর দ্বারা EOF এর কাজ হয় । কিন্তু কিভাবে হয় ? Google করে দেখেছি । সব মাথার উপর দিয়ে যায় ।

আর এইটা ছাড়া কি অন্য উপায় নেই c++ এ EOF এর কাজ করার জন্য ।

বিদ্রঃ যদিও "while(scanf("%d",&a)==1)" দ্বারাও EOF বুঝায় কিন্তু এর জন্য আমাকে #include <cstdio> use করতে হয় কিন্তু এটা না use করে কি করা যায় না ?

asked 30 Jan '17, 10:05

MD%20MOHIBUR%20RAHMAN's gravatar image

MD MOHIBUR RAHMAN
1408

edited 27 Apr '17, 07:08

menon's gravatar image

menon
4.1k222


আপনি C++ এ EOF এর কাজ করা জন্য cin ব্যবহার করতে পারেন ।

while(cin >> n >> a >> b) {
    // do something until EOF
}

এই কাজটা scanf() দিয়ে করতে হলে আপনাকে লিখতে হবে,

while(scanf("%d",&a) != EOF)

অথবা,

while(scanf("%d",&a) == 1)

EOF = End of File অর্থাৎ ফাইলে যতক্ষণ ইনপুট থাকবে ততক্ষণ প্রোগ্রাম চলতে থাকবে ।

এখন প্রশ্ন হতে পারে আমরা scanf("%d",&a) == 1 কেন দিয়েছি । এর উত্তর জানার জন্য আপনি scanf() ফাংশন যেটা রিটার্ন করে তার মান প্রিন্ট করতে পারেন,

printf("Value of scanf function is : %d", scanf("%d", &a));

এই প্রিন্ট ফাংশন টি ১ প্রিন্ট করবে । আমরা যদি দুইটা ইনপুট নেই scanf("%d %d", &a, &b); দিয়ে এবং এটাও printf() দিয়ে প্রিন্ট করে করি তবে ২ প্রিন্ট করতে । একই ভাবে ৩ টা ইনপুট নিলে ৩ প্রিন্ট করবে ।

scanf() দিয়ে আমরা মোট কয়টা সংখ্যা ইনপুট নিব সেটা প্রিন্ট করবে । কোন ইনপুট না নিলে শূন্য রিটার্ন করে । এই জন্য আমরা while লুপের মধ্যে আমরা ১, ২ বা ৩ লিখে থাকি ।

যখন কোন কিছু ইনপুট নেয়ার জন্য থাকবে না তখন scanf() শূন্য রিটার্ন করবে । শূন্য হলে আমাদের while লুপের শর্ত মিথ্যা হয়ে যাবে । এবং লুপ থেকে বের হয়ে আসবে ।

এখন প্রশ্ন হল while(~scanf("%d", &a)) এই টা কেন কাজ করে । এর উত্তর জানার জন্য আপনি EOF এর মান এই ভাবে প্রিন্ট করেন ।

printf("%d", EOF);

এইটা -1 প্রিন্ট করবে তো আমরা যখন while(scanf("%d", &a) != EOF) লিখি এইটা মানে while(scanf("%d", &a) != -1) আর আমরা যখন while(~scanf("%d", &a)) লিখছি এবং scanf() কোন ইনপুট নিচ্ছে না তখন scanf() শূন্য রিটার্ন করে এবং আমরা যদি শূন্য কে ~ করি তবে সেটা -1 করে দেয় ।

int a = 0;
printf("%d", ~a); // output = -1

এখন মনে হয় আপনি আপনার উত্তর পেয়ে গেছেন ।

ধন্যবাদ :)

permanent link

answered 30 Jan '17, 10:56

menon's gravatar image

menon
4.1k222

edited 27 Apr '17, 07:08

https://vjudge.net/problem/HDU-1049 এই problem টার solution দেখতে গিয়ে আমি "~" এইটা পেলাম । দেখা গেলো acceptও হয়ে গেছে । code:http://ideone.com/OhwMjv

(30 Jan '17, 18:35) MD MOHIBUR RAHMAN

উত্তর এডিট করে দিয়েছি @MD MOHIBUR RAHMAN

(30 Jan '17, 18:37) menon

ধন্যবাদ , ভাই ।

(31 Jan '17, 12:17) MD MOHIBUR RAHMAN
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:

×198
×8
×7
×4

question asked: 30 Jan '17, 10:05

question was seen: 590 times

last updated: 27 Apr '17, 07:08