无法按回车键完成 do-while 循环

Can't finish the do-while loop by pressing enter key

本文关键字:do-while 循环 回车      更新时间:2023-10-16

我想在按enter键时完成do-while循环。你有什么办法解决这个问题吗?我试图检查输入键的ASCII码,但没有成功。

                  do{
                    for(int dongu=0;dongu<secimSayi;dongu++)
                    {
                        cout<<"-";
                        sleep(1);
                        if(dongu==secimSayi-1)
                        {
                            cout<<">"<<endl;
                        }
                    }
                    for(int dongu2=0;dongu2<secimSayi;dongu2++)
                    {
                        cout<<" ";
                    }
                    for(int dongu3=secimSayi;0<dongu3;dongu3--)
                    {
                        cout<<"-bb";
                        sleep(1);                               
                        if(dongu3==1)
                        {
                            cout<<"<"<<endl;
                        } 
                    }
                }while(getchar()== 'n');  //I want to end this do-while loop when I pressed ENTER

我不相信c++中有一个标准的解决方案,这通常不是标准控制台程序的工作方式。

最标准的方法是使用线程,其中一个线程等待一行被读取,然后通过设置std::atomic<bool>向主线程发送信号。
(见示例)

另一个解决方案可能是根据操作系统寻找正确的库。在linux上,您可以使用护士,在windows上,也有支持。这样还可以更好地控制程序的输出。

线程方法的示例:

#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
class WaitForEnter
{
public:
  WaitForEnter() : finish(false)
  {
    thr = std::thread([this]() { 
        std::string in; 
        std::getline(std::cin, in);
        finish = true; 
      });
  }
  ~WaitForEnter()
  {
    thr.join();
  }
  bool isFinished() const { return finish; }
private:
  std::atomic<bool> finish;
  std::thread thr;
};
int main()
{
    WaitForEnter wait;
    while (! wait.isFinished())
    {
      std::cout << "." << std::flush;
      std::this_thread::sleep_for(std::chrono::seconds(1));
    }
    std::cout << "nfinishedn";
}