আমি নিম্নলিখিত প্রোগ্রাম আছে:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
উপরের কোডটির লেখক যেমন ব্যাখ্যা করেছেন: প্রোগ্রামটি সঠিকভাবে কাজ করবে না কারণ লাইন 1 এ, যখন ব্যবহারকারী এন্টার টিপায়, এটি ইনপুট বাফার 2 অক্ষরে ছেড়ে যাবে: Enter key (ASCII code 13)
এবং \n (ASCII code 10)
। অতএব, লাইন 2 এ এটি পড়বে \n
এবং ব্যবহারকারীর কোনও চরিত্র প্রবেশের অপেক্ষায় থাকবে না।
ঠিক আছে, আমি এটি পেয়েছি তবে আমার প্রথম প্রশ্নটি হল: দ্বিতীয় getchar()
( ch2 = getchar();
)টি চরিত্রের Enter key (13)
পরিবর্তে কেন পড়ছে না \n
?
এর পরে, লেখক এই জাতীয় প্রব্রিমগুলি সমাধান করার জন্য 2 টি উপায় প্রস্তাব করেছিলেন:
ব্যবহার
fflush()
এই মত একটি ফাংশন লিখুন:
void clear (void) { while ( getchar() != '\n' ); }
এই কোডটি আসলে কাজ করেছিল। তবে আমি কীভাবে এটি কাজ করে তা নিজেকে ব্যাখ্যা করতে পারি না? কারণ বিবৃতিতে, আমরা ব্যবহার করি getchar() != '\n'
, তার মানে কি কোনও একক চরিত্র বাদে পড়া '\n'
? যদি তাই হয় তবে ইনপুট বাফারে এখনও '\n'
চরিত্রটি রয়ে গেছে ?