Я кодирую программу, которая считывает данные непосредственно с пользовательского ввода, и мне было интересно, как я могу прочитать все данные, пока не будет нажата кнопка 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;
}
РЕДАКТИРОВАТЬ2:
Ребят, эта соулуция тоже не работает, ест первый чар из моей линии!
#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;
}
const int ESC=27;
, затем использоватьc=getch()
в своем цикле, а затем проверить, равно лиc
ESC
для завершения. - person Maroun   schedule 08.01.2013