我正在編寫一個程序,直接從用戶輸入讀取數據,並想知道如何才能讀取所有數據,直到鍵盤上的ESC按鈕被按下。我發現只是這樣的:如何閱讀,直到從CIN按下ESC按鈕C++
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;
}
您可以設置'常量int ESC = 27;',然後在循環中使用'c = getch()',然後檢查'c'是否等於'ESC'終止。 – Maroun
@MarounMaroun:不是getch();只有Windows解決方案...? – Katie
使用cin.get()而不是getch() – abnvp