person_two.name এর জন্য কোনো ইনপুট নিচ্ছে না। শুধু salary ইনপুট নিচ্ছে।

 #include <stdio.h>

 struct person
 {
     char name[20];
     int salary;
 };

 int main()
 {
      struct person person_one,person_two;

      printf("Enter Person one Name:\n\n");
      gets(person_one.name);
      printf("\nEnter Person one Salary:\n\n");
      scanf("%d",&person_one.salary);

      printf("Enter Person two Name:\n\n");
      gets(person_two.name);
      printf("\nEnter Person two Salary:\n\n");
      scanf("%d",&person_two.salary);

      return 0;
}

asked 15 Apr, 19:37

mohiuddin's gravatar image

mohiuddin
202

edited 16 Apr, 08:48

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
63118


সমস্যাটা হচ্ছে scanf() এন্টার চাপার আগ পর্যন্ত ইনপুট নেয় এবং এন্টার চাপলে কিবোর্ড থেকে যে নিউলাইন (\n) ক্যারেকটার যায় সেটা scanf() হ্যান্ডেল করে না। তাই সেটা ইনপুট বাফারে রয়ে যায়। অন্যদিকে gets() ও একই রকম এন্টার চাপার আগ পর্যন্ত ইনপুট নিয়ে স্ট্রিং রাখে এবং সে নিউলাইন ক্যারেকটারটাকেও হ্যান্ডেল করে।

সেজন্য এখানে scanf("%d",&person_one.salary); লাইনে ইনপুট নেয়ার পর একটা নিউলাইন ক্যারেক্টার (বা এন্টার) ইনপুট বাফারে রয়ে যাচ্ছে। যেটা পরবর্তী gets() ধরছে এবং যেহেতু সে এন্টার পেয়ে যাচ্ছে মনে করছে এখানেই ইনপুট শেষ তাই আর ইনপুট চাচ্ছে না।

permanent link

answered 16 Apr, 07:54

Ashfaqur%20Rahman's gravatar image

Ashfaqur Rahman
7839

edited 16 Apr, 08:56

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
63118

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:

×401
×14
×10

question asked: 15 Apr, 19:37

question was seen: 185 times

last updated: 16 Apr, 08:56