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 << "
";
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 << "
";
c = cin.get();
if(c == ESC)
break;
}
return 0;
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…