我不确定在Linux中是否有任何不同,但我在网上找到了这个:
cout << "Press Enter to Continue...";
cin.ignore(numeric_limits<streamsize>::max(),'\n');
当然,标题中包含#include<limits>
就足够了。
但是,它似乎在我的程序中不起作用。
它编译,运行,但它不会等待。
基本上,我有一个菜单,可以通过方法调用在屏幕上显示人员列表。我希望在系统返回菜单之前暂停该列表。
以下是菜单中的代码:
//Manager's Menu
void SelectionPage::showManagerMenu(){
char option;
while(true)
{
system("clear"); //Clears the terminal
cout<<" Flat Manager's Menu"<<endl<<endl; //Display manager's menu
cout << "Select Manager option" << endl;
cout << "a) Add a new Flat Member" << endl;
cout << "b) Delete an existing Flat Member" << endl;
cout << "c) List Flat Members" << endl;
cout << "d) Duties" <<endl;
cout << "e) Resources" <<endl;
cout << "f) Reset System" <<endl;
cout << "q) Exit" << endl;
cout << "make selection: ";
cin >> option;
switch(option) { //Takes the user to the corresponding menu or method
case 'a': system("clear");
memberList.addNewFlatMember(points);
break;
case 'b': system("clear");
memberList.deleteFlatMember();
break;
case 'c': system("clear");
memberList.listFlatMembers();
break;
case 'd': system("clear");
showDutiesMenu();
break;
case 'e': system("clear");
showResourcesMenu();
break;
case 'f': //reset();
break;
case 'q': exit(0);
default: cout << "Option not recognised: " << option << endl;
showManagerMenu();
}
}
}
我想选择的选项是c),这导致:
//Show the current flat population
void MemberManagement::listFlatMembers(){
cout<<" Member List"<<endl<<endl;
importFlatMembers(); //get flat member info from file
for( int count = 0; count<flatMemberList.size(); count++){
cout << count+1<<". "<<flatMemberList[count].getName() << endl;
}
cout << "Press any key to Continue...";
cin.ignore(numeric_limits<streamsize>::max(),'\n');
return;
}
如果您想查看我的代码中的任何其他内容,请随时告诉我。
提前致谢。
答案 0 :(得分:5)
你能不能只使用cin.get()
(获得一个字符)?
答案 1 :(得分:5)
在* nix中,终端通常在向程序发送任何内容之前等待整行输入。这就是为什么你发布的示例代码说"Press Enter to Continue...";
,然后丢弃所有内容直到下一个换行符。
为了避免这种情况,您应该将终端设置为非规范模式,这可以使用POSIX termios(3)
功能完成,如How to check if a key was pressed in Linux?中所述。
答案 2 :(得分:1)
以下是我的代码中的代码段。它适用于Windows和Linux。
#include <iostream>
using std::cout;
using std::cin;
// Clear and pause methods
#ifdef _WIN32
// For windows
void clearConsole() {
system("cls");
}
void waitForAnyKey() {
system("pause");
}
#elif __linux__
// For linux
void clearConsole() {
system("clear");
}
void waitForAnyKey() {
cout << "Press any key to continue...";
system("read -s -N 1"); // Continues when pressed a key like windows
}
#endif
int main() {
cout << "Hello World!\n";
waitForAnyKey();
clearConsole();
return 0;
}