如何阅读,直到ESC键从CIN的下加压++(How to read until ESC button

2019-07-17 23:12发布

我编码一个程序,直接从用户输入读取数据,并想知道我怎么能读取所有数据,直到键盘上的ESC键被按下。 我只发现了这样的事情:

std::string line;
while (std::getline(std::cin, line))
{
    std::cout << line << std::endl;
}

但需要添加一个可移植的方式(Linux / Windows的)来捕捉按下ESC键,然后打破while循环。 这该怎么做?

编辑:

我写了这一点,但仍然 - 即使我按下键盘上的ESC的按钮的工作原理:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    const int ESC=27;
    std::string line;
    bool moveOn = true;

    while (std::getline(std::cin, line) && moveOn)
    {
        std::cout << line << "\n";
        for(unsigned int i = 0; i < line.length(); i++)
        {
            if(line.at(i) == ESC)
            { 
                moveOn = false;
                break;

            }
        }
    }
    return 0;
}

EDIT2:

伙计们,这soulution没有工作过,它吃的第一个字符从我行!

#include <iostream>
#include <string>
using namespace std;

int main()
{
    const int ESC=27;
    char c;
    std::string line;
    bool moveOn = true;

    while (std::getline(std::cin, line) && moveOn)
    {
        std::cout << line << "\n";
        c = cin.get();
        if(c == ESC)
            break;

    }
    return 0;
}

Answer 1:

int main() {
  string str = "";
  char ch;
  while ((ch = std::cin.get()) != 27) {
    str += ch;
  }

 cout << str;

return 0;
}

这需要输入到您的字符串,直到它遇到转义符



Answer 2:

你读了线后,去虽然你刚才读的所有字符,并寻找逃生ASCII值(十进制27)。


这里就是我的意思是:

while (std::getline(std::cin, line) && moveOn)
{
    std::cout << line << "\n";

    // Do whatever processing you need

    // Check for ESC
    bool got_esc = false;
    for (const auto c : line)
    {
        if (c == 27)
        {
            got_esc = true;
            break;
        }
    }

    if (got_esc)
        break;
}


Answer 3:

我发现,这个工程让输入Escape键,您还可以在同时功能定义和列表中的其他值。

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

#define ESCAPE 27

int main()
{
    while (1)
    {
        int c = 0;

        switch ((c = _getch()))
        {
        case ESCAPE:
            //insert action you what
            break;
        }
    }
    return 0;
}


Answer 4:

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

using namespace std;

int main()
{
    int number;
    char ch;

    bool loop=false;
    while(loop==false)
    {  cin>>number;
       cout<<number;
       cout<<"press enter to continue, escape to end"<<endl;
       ch=getch();
       if(ch==27)
       loop=true;
    }
    cout<<"loop terminated"<<endl;
    return 0;
}


Answer 5:

我建议在C ++不只是ESC字符,但是对于键盘在任何语言的任何其他字符,读取的字符,你输入一个整型变量,然后打印出来的整数。

如果不是这样,在网上搜索ASCII字符的列表。

这将使该键的ASCII你价值,那么它的朴素简单

if(foo==ASCIIval)
   break;

对于ESC字符,ASCII值是27。



文章来源: How to read until ESC button is pressed from cin in C++