How to read until ESC button is pressed from cin in C++

狂风中的少年 提交于 2019-12-18 05:17:16

问题


I'm coding a program that reads data directly from user input and was wondering how could I read all data until ESC button on keyboard is pressed. I found only something like this:

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

but need to add a portable way (Linux/Windows) to catch a ESC button pressed and then break a while loop. How to do this?

EDIT:

I wrote this, but still - works even if I press an ESC button on my keyboard:

#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:

Guys, this soulution doesn't work too, it eats the first char from my line!

#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;
}

回答1:


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

 cout << str;

return 0;
}

this takes the input into your string till it encounters Escape character




回答2:


After you read the line, go though all characters you just read and look for the escape ASCII value (decimal 27).


Here's what I mean:

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;
}



回答3:


I found that this works for getting input for the escape key, you can also define and list other values in the while function.

#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;
}



回答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;
}



回答5:


I would suggest that for not just ESC character in C++, but for any other character of the keyboard in any language, read characters that you input into an integer variable and then print them as integer.

Either that or search online for a list of the ASCII characters.

This will give you ASCII value of the key, and then it's plain simple

if(foo==ASCIIval)
   break;

For the ESC character, the ASCII value is 27.



来源:https://stackoverflow.com/questions/14214753/how-to-read-until-esc-button-is-pressed-from-cin-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!