কীভাবে অনুকরণ করতে হবে "চালিয়ে যেতে কোনও কী টিপুন?"


87

আমি একটি সি ++ প্রোগ্রাম লেখার চেষ্টা করছি যাতে ব্যবহারকারী যখন কীবোর্ড থেকে কোনও অক্ষর প্রবেশ করেন এবং এটি কোডের পরবর্তী লাইনে চলে যায়।

আমার কোডটি এখানে:

char c;

cin>>c;

cout<<"Something"<<endl;

তবে এটি কাজ করছে না, কারণ এটি কেবলমাত্র পরবর্তী লাইনে চলে আসে যখন আমি কোনও অক্ষর ইনপুট করি এবং তারপরে ENTER টিপুন।

বা

আমি যদি এটি ব্যবহার করি

cin.get() or cin.get(c)

আমি এন্টার টিপলে এটি নির্দেশের পরবর্তী লাইনে চলে যায়।

তবে আমি চেয়েছিলাম এটি কীবোর্ডে চাপানো কোনও কীতে পরের লাইনে স্থানান্তরিত হয়, এটি কীভাবে করা যায়?


যতদূর আমি জানি, সমস্যাটি হ'ল আপনার শেলটি আপনাকে ENTER বা EOF টিপানোর জন্য অপেক্ষা করছে এবং তারপরে আপনার প্রোগ্রামটি বাফারে যা আছে তা বা এটির মতো কিছু যত্ন নিতে দেবে। হয়তো আরও কিছু জ্ঞানযুক্ত কেউ সত্য ব্যাখ্যা দিতে পারে। তবে আমি মনে করি এটি প্রথম দেখা যতটা সহজ নয়।
লুকাস 21

7
এখন পর্যন্ত এটি হ্যান্ডেল করার সহজতম উপায় এবং একমাত্র পোর্টেবল উপায় হ'ল আপনার প্রম্পটটিকে "চালিয়ে যেতে কোনও কী টিপুন" থেকে "চালিয়ে যাওয়ার জন্য এন্টার কী টিপুন" থেকে পরিবর্তন করা।
রব মায়ফ

@ লুকাস - আমি এক্সকোড সহ ম্যাক ব্যবহার করছি।
আউটকোড

@ লুকাস: এটি শেল নয়, এটি নিজেই প্রোগ্রাম।
কিথ থম্পসন

@ কিথথম্পসন: এটি দু'বছরেরও বেশি আগে, তবে আমি মনে করি যে আমি ইনপুট সারিটি ব্যবহারকারীর প্রক্রিয়া দ্বারা পরিচালিত না হয়ে কার্নেলের অভ্যন্তরে প্রবেশ করানো উচিত সে বিষয়টিটি তৈরি করার চেষ্টা করছিলাম।
লুকাস

উত্তর:


65

উইন্ডোজে:

system("pause");

এবং ম্যাক এবং লিনাক্সে:

system("read");

"চালিয়ে যেতে কোনও কী টিপুন ..." আউটপুট আউট করবে এবং স্পষ্টতই, কোনও কী চাপার জন্য অপেক্ষা করুন। আমি আশা করি আপনি কি বোঝাতে চেয়েছিলেন


4
systemবাহ্যিক প্রোগ্রাম কল। কোনও কীটির জন্য অপেক্ষা করতে আপনাকে বাহ্যিক প্রোগ্রামটি কল করতে হবে না! এটি যখন আপনি সামনে বসে থাকেন তখন আপনার কম্পিউটার চালু করার জন্য অন্য ব্যক্তিকে ফোন করার মতো - এটি ধীর সমাধান।
আদা প্লাসপ্লাস প্লাস

8
সত্য, তবে এটি কেবল এক লাইন দীর্ঘ! কখনও কখনও কম্পিউটারকে কিছু চক্র সংরক্ষণ করার চেষ্টা করা ঠিক নয় ...
এলিয়ট ক্যামেরন

14
ধীরে ভুলে যান, এটি প্রথম প্রোগ্রামটিকে "বিরতি" নামে কল করে যা এটি PATH- এ সন্ধানের জন্য ঘটে এবং এটি কলিং প্রোগ্রামের অধিকারীকরণ স্তরটি দেয়। এমনকি যদি আপনি একজন ছাত্র কেবল নিজের কোডটি পরীক্ষা করেন তবে এটি এখনও একটি বিশাল সুরক্ষা ঝুঁকিপূর্ণ।
অ্যান কুইন

6
@ এক্সডিফেসেম - বিরতি একটি আসল প্রোগ্রাম যা সিস্টেম () উইন্ডোজ চালাতে বলে run তবে, 'বিরতি' নামক আর একটি প্রোগ্রাম রয়েছে এবং উইন্ডোজগুলি প্রথমে সেই প্রোগ্রামটি আবিষ্কার করে, এটি পরিবর্তে এটি চালিত হবে। আমি মনে করি আমি সম্ভবত তাত্পর্যটি কিছুটা কমিয়ে ফেলেছি তবে কেবল cin.get () ব্যবহার করা আরও সহজ এবং কোনও প্রোগ্রাম বিরতি / বিরতিতে প্রত্যাবর্তন করতে হবে
অ্যান কুইন

4
আমি রহস্যের ভক্ত নই। সিস্টেম ("বিরতি") একটি কম্বল স্টেটমেন্ট তৈরি করা একটি সুরক্ষা ঝুঁকি এবং আপনার নিজের কোডটি পরীক্ষা করার সময়ও এটি খারাপ যে এখানে অনুপাতের বাইরে জিনিসগুলিকে ফুটিয়ে তুলছে। cin.get () হতে পারে সঠিক সমাধান, তবে এটি যে প্রশ্নটি করা হয়েছিল তা সমাধান করে না ... cin.get () কেবল "প্রবেশ" বা "রিটার্ন" চাপার পরে প্রতিক্রিয়া জানায়। প্রশ্নটি বিশেষত কোনও মূল প্রেসে সাড়া দেওয়ার ছিল। সিস্টেম ("বিরতি") ঠিক এটি করে। প্রথমত, ভিজুয়াল স্টুডিও থেকে ডিবাগ করার সময় আমি একমাত্র জায়গা যেখানে এটি দরকারী হিসাবে দেখেছি এটি একটি ডি ক্লাসে রয়েছে, সুতরাং আমি মনে করি যে সিস্টেমটি ("বিরতি") কাজ করে
গ্রেগর

53

আপনি যদি উইন্ডোজে থাকেন তবে আপনি এটি ব্যবহার করতে পারবেন kbhit()যা মাইক্রোসফ্ট রান-টাইম লাইব্রেরির অংশ। আপনি যদি লিনাক্সে থাকেন তবে আপনি kbhitএভাবে ( উত্স ) প্রয়োগ করতে পারেন :

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>

int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;

  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);

  ch = getchar();

  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);

  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }

  return 0;
}

আপডেট: উপরের ফাংশনটি ওএস এক্সে কাজ করে (কমপক্ষে, ওএস এক্স 10.5.8 - চিতাবাঘে, সুতরাং আমি এটি ওএস এক্স এর আরও সাম্প্রতিক সংস্করণগুলিতে কাজ করতে আশা করব)। এই सारটিটিkbhit.c লিনাক্স এবং ওএস এক্স উভয় হিসাবে সংরক্ষণ করা এবং সংকলন করা যায়

gcc -o kbhit kbhit.c

সাথে চালানো যখন

./kbhit

এটি আপনাকে কী-পিসের জন্য অনুরোধ জানায় এবং আপনি কোনও কী চাপলে (প্রবেশ বা প্রিন্টযোগ্য কীগুলিতে সীমাবদ্ধ নয়) প্রস্থান করে।

@ জনসইয়েব - দয়া করে আপনার "বিশিষ্ট ক্যানোনিকাল উত্তর" এবং "সমস্ত উদ্বেগ" দ্বারা বোঝাতে চাইছেন la এছাড়াও, "ক্রস-প্ল্যাটফর্ম" পুনরায়: এই প্রয়োগের মাধ্যমে kbhit()আপনি লিনাক্স / ইউনিক্স / ওএস এক্স / উইন্ডোজের সি ++ প্রোগ্রামে একই কার্যকারিতা রাখতে পারেন - কোন প্ল্যাটফর্মগুলি আপনি উল্লেখ করছেন?

@ জনসইয়েব এর জন্য আরও আপডেট: সি ++ অ্যাপ্লিকেশনগুলি হারমেটিক্যালি সিল করা সি ++ পরিবেশে বাস করে না। সি ++ এর সাফল্যের একটি বড় কারণ সি'র সাথে আন্তঃক্রিয়াশীলতা হ'ল সমস্ত মূলধারার প্ল্যাটফর্মগুলি সি ইন্টারফেসের মাধ্যমে প্রয়োগ করা হয় (এমনকি অভ্যন্তরীণ বাস্তবায়ন সি ++ ব্যবহার করছে এমন কি) তাই আপনার "উত্তরাধিকার" সম্পর্কে কথাবার্তা স্থির বলে মনে হয়। এছাড়াও, আমরা যেমন একটি একক ফাংশনের কথা বলছি, এর জন্য আপনার কেন সি ++ দরকার ("ক্লাস সহ সি")? যেমনটি আমি উল্লেখ করেছি, আপনি সি ++ এ লিখতে পারেন এবং সহজেই এই কার্যকারিতাটি অ্যাক্সেস করতে পারেন এবং আপনার অ্যাপ্লিকেশনটির ব্যবহারকারীরা আপনি কীভাবে এটি প্রয়োগ করেছেন সে বিষয়ে যত্নের সম্ভাবনা নেই ।


এটি লজ্জাজনক যে কনসোলটি হ্যান্ডেল করার কোনও স্ট্যান্ডার্ড উপায় নেই, আপনাকে সর্বদা কিছু OS Magick ব্যবহার করতে হবে
ভার্গাস

4
@Johnsyweb: ধন্যবাদ আপনি , কিন্তু আপনার উদাহরণ শো বৈশিষ্ট্য আমাকে সি সম্পর্কে দমান ++,। আপনার kbhit()ফাংশনটি terminal_settingsএকটি লাইনে একটি ভেরিয়েবল ঘোষণা করে যা কিছু না করে প্রদর্শিত হয় এবং তবুও এটি সমস্ত কিছু করে। কেউ কেউ মনে করতে পারে এটি ঝরঝরে, তবে আমি এটি অপঠনযোগ্যতার কাছে অস্পষ্ট বলে মনে করি।
বিনয় সাজিপ

4
@VinaySajip: আমার বাস্তবায়নের ব্যবহার RAII , যা C ++ সবচেয়ে গুরুত্বপূর্ণ বাগধারার অন্যতম। যদিও এই উদাহরণে এটি কঠোরভাবে প্রয়োজনীয় নয়, আপনি যখন কোনও রাজ্য সংরক্ষণ এবং পুনরুদ্ধার করতে চান তখন প্রবেশ করা আমার পক্ষে একটি ভাল অভ্যাসের মতো হয়ে গেছে।
জনসিওয়েব

4
@ জনসইয়েব: আমি আরআইআইআই এবং এটির যে সুবিধা নিয়ে আসে সে সম্পর্কে আমি সচেতন, আমি নিজেই একজন পুরানো সি ++ হাতে আছি। আমার বক্তব্যটি রয়ে গেছে: ঘোষণার মধ্যে এবং এর পর্দার আড়ালে কী করছে এর মধ্যে সুস্পষ্ট সংযোগ নেই। এটি সরল পুরাতন সি এর চেয়ে চকচকে সি ++ আইডেম ব্যবহার করতে পারে, আমার দৃষ্টিভঙ্গি এটি আলোকিত করার জন্য সামান্য কাজ করে এবং যা চলছে তা অস্পষ্ট করার পক্ষে অনেক কিছুই করে। এটি কোনওভাবেই আপনাকে ব্যক্তিগতভাবে নির্দেশিত নয় - এটি কেবলমাত্র একটি মতামত যা কোড তৈরি করতে সি ++ ব্যবহার করা যেতে পারে যা অপ্রয়োজনীয়ভাবে বোঝা শক্ত। আমি এখন আমার সোপবক্সটি নেব, 'নফ বলল।
বিনয় সাজিপ

4
এটি দুর্দান্ত এবং সব কিছু, তবে স্টিডিনে এখনও আগের কোনও আবর্জনা ধরা পড়ে :-)
টিয়াগো

9

সম্পূর্ণরূপে বহনযোগ্য সমাধান নেই।

উইন্ডোজ, ইউনিক্স-মতো সিস্টেম এবং এমনকি এমএস-ডস এবং ভিএমএসের সমাধান সহ কমপ্লেক্স.এল.এফ.সি.এইচ.কিউ.এর সাধারণ প্রশ্নাবলীর 19.1 প্রশ্নটি কিছুটা গভীরতায় কভার করে।

একটি দ্রুত এবং অসম্পূর্ণ সারাংশ:

  • আপনি cursesগ্রন্থাগারটি ব্যবহার করতে পারেন ; কল cbreak()দ্বারা অনুসরণ getch()(উইন্ডোজ-নির্দিষ্ট নিবন্ধের সাথে বিভ্রান্ত হবেন না getch()ফাংশন)। নোট করুন যে cursesসাধারণত টার্মিনালটির নিয়ন্ত্রণ নেয়, সুতরাং এটি সম্ভবত ওভারকিল হওয়ার সম্ভাবনা রয়েছে।
  • আপনি ioctl()টার্মিনাল সেটিংস হস্তক্ষেপ করতে ব্যবহার করতে সক্ষম হতে পারে ।
  • POSIX- অনুবর্তী সিস্টেমগুলিতে tcgetattr()এবং tcsetattr()এটি আরও ভাল সমাধান হতে পারে।
  • ইউনিক্স, আপনি ব্যবহার করতে পারেন system()ডাকা sttyকমান্ড।
  • এমএস-ডস-এ, আপনি ব্যবহার করতে পারেন getch()বা getche()
  • ভিএমএসে (বর্তমানে ওপেনভিএমএস বলা হয়), স্ক্রিন ম্যানেজমেন্ট ( SMG$) রুটিনগুলি কৌশলটি সম্পাদন করতে পারে।

এই সমস্ত সি সমাধানগুলি সি ++ তে সমানভাবে ভালভাবে কাজ করা উচিত; আমি কোনও সি ++ - নির্দিষ্ট সমাধান সম্পর্কে জানি না।


এই সমস্ত মাল্টি-প্ল্যাটফর্ম সমাধান কারও সাথে এমন কোনও ফাংশন লিখতে পারে যা প্রয়োগ করা হয় আপনার প্ল্যাটফর্মটি কী তা নির্ধারণ করতে প্রচুর প্রাক-প্রসেসরের সাহায্যে আপনার প্ল্যাটফর্মের উপর নির্ভর করে সঠিক জিনিসটি প্রয়োগ করতে।
ক্যাশকু

6

এই কার্যকারিতাটি অর্জন করতে আপনি এনক্রেস লাইব্রেরি ব্যবহার করতে পারেন যা উইন্ডোজ এবং লিনাক্স উভয় ক্ষেত্রেই প্রয়োগ করা হয়েছিল (এবং ম্যাকোস হিসাবে আমি জানি)।


আচ্ছা এটি এমন একটি অ্যাসাইনমেন্ট যাতে আমি কোনও বাহ্যিক গ্রন্থাগার ইত্যাদি ব্যবহার করতে পারি না, তাই কেবল "অধ্যায় প্রসঙ্গে" মোমগুলিতে থাকতে হবে।
itaboutcode

4
তারপরে একমাত্র বিকল্প হ'ল আপনি যে অপশনটি সমর্থন করার পরিকল্পনা করছেন তার জন্য প্রয়োজনীয় কার্যকারিতা বাস্তবায়ন করা।
কিরিল ভি লায়াডভিনস্কি

4
ncurses কমবেশি একটি ভিটি 200 ক্লায়েন্ট। টিটিওয়াই থেকে সহজভাবে পড়ার জন্য কিছুটা ওভারকিল।
গ্রেফেইড

5

উইন্ডোজগুলিতে, এই সংক্ষিপ্ত প্রোগ্রামটি লক্ষ্যটি সম্পাদন করে: getchকোনও কী চাপ না দেওয়া পর্যন্ত কনসোলটি বিরতি দেয় ( https://www.geeksforgeeks.org/differences-getchar-getch-getc-getche/ )

#include<iostream.h>
#include<conio.h>

using namespace std;

void  check()
{
    char chk; int j;
    cout<<"\n\nPress any key to continue...";
    chk=getch();
    j=chk;
    for(int i=1;i<=256;i++)
      if(i==j) break;
    clrscr();
}

void main()
{
    clrscr();
    check();
    cout<<"\n\nIt works!";
    getch();
}

এটি লক্ষ করা উচিত যে getch স্ট্যান্ডার্ড লাইব্রেরির অংশ নয়।


4
এই খুব সহজ প্রোগ্রাম। এটি বোঝা খুব সহজ
বোলডএক্স

4
দয়া করে ব্যাখ্যা কিভাবে getch()থেকে ভিন্ন cin.getবা cin>>, এর ডকুমেন্টেশন হয়তো কিছু লিংক
user2622016

4
কনিওটি কেবল উইন্ডোজে রয়েছে
অ্যান্ড্রু ওল্ফ

4

আপনি কী অর্জন করতে চাইছেন তা আমি দেখেছি, কারণ আমার মনে আছে আমি একই জিনিসটি করতে চেয়েছিলাম। বিনয় দ্বারা অনুপ্রাণিত হয়ে আমি এমন কিছু লিখেছিলাম যা আমার পক্ষে কাজ করে এবং আমি একরকম বুঝতে পারি। তবে আমি কোনও বিশেষজ্ঞ নই, তাই দয়া করে সাবধান হন।

আমি জানি না কীভাবে বিনয় জানেন যে আপনি ম্যাক ওএস এক্স ব্যবহার করছেন। তবে বেশিরভাগ ইউনিক্স-এর মতো ওএসের সাথে এটির মতো কাজ করা উচিত। রিসোর্স হিসাবে সত্যই সহায়ক হ'ল ওপেনগ্রুপ

ফাংশনটি ব্যবহারের আগে বাফারটি ফ্লাশ করার বিষয়টি নিশ্চিত করুন।

#include <stdio.h>
#include <termios.h>        //termios, TCSANOW, ECHO, ICANON
#include <unistd.h>     //STDIN_FILENO


void pressKey()
{
    //the struct termios stores all kinds of flags which can manipulate the I/O Interface
    //I have an old one to save the old settings and a new 
    static struct termios oldt, newt;
    printf("Press key to continue....\n");

    //tcgetattr gets the parameters of the current terminal
    //STDIN_FILENO will tell tcgetattr that it should write the settings
    // of stdin to oldt
    tcgetattr( STDIN_FILENO, &oldt);
    //now the settings will be copied 
    newt = oldt;

    //two of the c_lflag will be turned off
    //ECHO which is responsible for displaying the input of the user in the terminal
    //ICANON is the essential one! Normally this takes care that one line at a time will be processed
    //that means it will return if it sees a "\n" or an EOF or an EOL
    newt.c_lflag &= ~(ICANON | ECHO );      

    //Those new settings will be set to STDIN
    //TCSANOW tells tcsetattr to change attributes immediately. 
    tcsetattr( STDIN_FILENO, TCSANOW, &newt);

    //now the char wil be requested
    getchar();

    //the old settings will be written back to STDIN
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt);

}


int main(void)
{
  pressKey();
  printf("END\n");
  return 0;
}

ও_নব্লকও একটি গুরুত্বপূর্ণ পতাকা বলে মনে হচ্ছে, তবে এটি আমার জন্য কিছুই পরিবর্তন করেনি।

আমি গভীর প্রশংসা করি এমন লোকেরা যদি এই বিষয়ে মন্তব্য করে এবং কিছু পরামর্শ দেয় তবে আমি প্রশংসা করি।


ও_নব্লক সেট করা উচিত কারণ এটি ব্যতীত, গেটচার () (যা পড়ার কলগুলি কল করে) ইনপুটটির জন্য অপেক্ষা করতে অবরুদ্ধ করবে। Kbhit () সমাধানটি আপনাকে বলে যে কোনও কী চাপছে কিনা, অপেক্ষা না করে; আপনি এটি ওয়েট লুপে বা অন্য কোনও উদ্দেশ্যে ব্যবহার করতে পারেন, সুতরাং এটি আরও সাধারণ সমাধান। ও-ননব্লকবিহীন একটি সমাধান কোনও কী চাপার আগ পর্যন্ত অপেক্ষা করবে - এই প্রশ্নের জন্য ঠিক আছে তবে সাধারণভাবে কার্যকর নয়।
বিনয় সাজিপ

4

আপনি মাইক্রোসফ্ট-নির্দিষ্ট ফাংশন _getch ব্যবহার করতে পারেন :

#include <iostream>
#include <conio.h>
// ...
// ...
// ...
cout << "Press any key to continue..." << endl;
_getch();
cout << "Something" << endl;

3

এটি একটি উইন্ডোজ প্ল্যাটফর্মে কাজ করে: এটি সরাসরি মাইক্রোপ্রসেসর নিবন্ধগুলি ব্যবহার করে এবং কী প্রেস বা মাউসবাটন পরীক্ষা করতে ব্যবহার করা যেতে পারে

    #include<stdio.h>
    #include<conio.h>
    #include<dos.h>
    void main()
    {
     clrscr();
     union REGS in,out;
     in.h.ah=0x00;
     printf("Press any key : ");

     int86(0x16,&in,&out);
     printf("Ascii : %d\n",out.h.al);
     char ch = out.h.al;
     printf("Charcter Pressed : %c",&ch);
     printf("Scan code : %d",out.h.ah);
     getch();
    }

3

আপনি যদি ভিজুয়াল স্টুডিও 2012 বা ততোধিক পুরানো ব্যবহার করছেন তবে getch()ফাংশনটি ব্যবহার করুন , আপনি যদি ভিজ্যুয়াল স্টুডিও 2013 বা আরও নতুন ব্যবহার করছেন তবে ব্যবহার করুন _getch()। আপনি ব্যবহার করতে হবে #include <conio.h>। উদাহরণ:

#include <iostream>
#include <conio.h>

int main()
{
   std::cout << "Press any key to continue. . .\n";
   _getch(); //Or getch()
}

1

আপনি গেটচর রুটিন ব্যবহার করতে পারেন ।

উপরের লিঙ্ক থেকে:

/* getchar example : typewriter */
#include <stdio.h>

int main ()
{
  char c;
  puts ("Enter text. Include a dot ('.') in a sentence to exit:");
  do {
    c=getchar();
    putchar (c);
  } while (c != '.');
  return 0;
}

4
আমি যদি তাকে সঠিকভাবে বুঝতে পারি তবে ওপি এটিই চেয়েছিল বলে আমি মনে করি না। গ্যাচার () এটি পড়তে পারার আগে আপনাকে বাফারটি পূরণ করতে ENTER টিপতে হবে।
লুকাস

0

এছাড়াও আপনি conio.h থেকে getch () ব্যবহার করতে পারেন। ঠিক এই রকম:

...includes, defines etc
void main()
{
//operator
getch(); //now this function is waiting for any key press. When you have pressed its     just     //finish and next line of code will be called
}

সুতরাং, ইউনিক্সের কনিও.হ. না থাকার কারণে, আমরা এই কোডটি দ্বারা গ্যাচ () অনুকরণ করতে পারি (তবে এই কোডটি ইতিমধ্যে ভাইনারি দ্বারা লেখা, আমার ব্যর্থ):

#include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch( ) {
  struct termios oldt,
             newt;
  int            ch;
  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}

0

আর একটি বিকল্প ফাংশন পয়েন্টার সহ থ্রেড ব্যবহার করছে :

#include <iostream>
#include <thread> // this_thread::sleep_for() and thread objects
#include <chrono> // chrono::milliseconds()

bool stopWaitingFlag = false;

void delayms(int millisecondsToSleep) 
{
  std::this_thread::sleep_for(std::chrono::milliseconds(millisecondsToSleep));
}

void WaitForKey() 
{
  while (stopWaitingFlag == false)
  {
    std::cout<<"Display from the thread function"<<std::endl;
    delayms(1000);
  }
}

 

int main()
{
  std::thread threadObj(&WaitForKey);

  char userInput = '\0';
  while (userInput != 'y')
  {
    std::cout << "\e[1;31mWaiting for a key, Enter 'y' for yes\e[0m" << std::endl;
    std::cin >> userInput;
    if (userInput == 'y') {
      stopWaitingFlag = true;
    }
  }
  if (threadObj.joinable())
    threadObj.join();

  std::cout<<"Exit of Main function"<<std::endl;
  return 0;
}

-1

আপনি যদি এখন এমএসডিএন-তে কেবিট () ফাংশনটি সন্ধান করেন তবে এটি বলছে যে ফাংশনটি অবচিত করা হয়েছে। পরিবর্তে _kbhit () ব্যবহার করুন।

#include <conio.h>
int main()
{
    _kbhit();
    return 0;
}

-1
#include <iostream>
using namespace std;

int main () {
    bool boolean;
    boolean = true;

    if (boolean == true) {

        cout << "press any key to continue";
        cin >> boolean;

    }
    return 0;
}

-4

system("pause");কমান্ডটি ব্যবহার করুন ।

অন্যান্য সমস্ত উত্তর ইস্যুটিকে জটিল করে তুলেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.